Как выполнять итерацию по конкретным объектам в JavaScript?
У меня есть объект, и я хочу перебрать некоторые определенные ключи этого объекта. Как достичь этого?
Рассмотрим фрагмент ниже:
Как я могу перебирать ключи table1, table2 и table3 и не все из них?
var table_object = {
table1: "hello world",
table1_name: "greetings_english.html",
table2: "hola",
table2_name: "greetings_spanish.html",
table3: "Bonjour",
table3_name: "greetings_french.html"
};
Ответы
Ответ 1
Вы можете отфильтровать ключи, а затем повторить остальные.
var table_object = { table1: "hello world", table1_name: "greetings_english.html", table2: "hola", table2_name: "greetings_spanish.html", table3: "Bonjour", table3_name: "greetings_french.html" };
Object
.keys(table_object)
.filter(function (k) { return !/_/.test(k); })
.forEach(function (k) { console.log(table_object[k]); });
Ответ 2
Вы должны указать, к какому ключу нужно выполнить итерацию:
var table_object = {
table1: "hello world",
table1_name: "greetings_english.html",
table2: "hola",
table2_name: "greetings_spanish.html",
table3: "Bonjour",
table3_name: "greetings_french.html"
};
var keysToIterateThrough = ["table1", "table2", "table3"];
keysToIterateThrough.forEach(key => {
var value = table_object[key];
console.log(`key: ${key} => value: ${value}`);
})
Ответ 3
Вы должны использовать Object.keys
, чтобы узнать все ключи объектов, затем примените метод filter
, чтобы фильтровать их.
var table_object = {
table1: "hello world",
table1_name: "greetings_english.html",
table2: "hola",
table2_name: "greetings_spanish.html",
table3: "Bonjour",
table3_name: "greetings_french.html"
};
var keysToIterate = ["table1", "table2", "table3_name"];
let values=Object.keys(table_object)
.filter(a=>keysToIterate.includes(a))
.map(a=> table_object[a]);
console.log(values);
Ответ 4
Можно попробовать что-то вроде
var keys = ['table1', 'table2', 'table3']
Object.keys(table_object).forEach(function(key) {
if (keys.indexOf(key) != -1) {
var table_value = table_object[key]
}
})
Ответ 5
Невозможно выполнить итерацию по ограниченным клавишам, но вы можете иметь массив ключей, которые вы хотите итерации. Затем перетащите этот массив, чтобы получить соответствующее значение от объекта
var objKeys = ['table1', 'table2', 'table3']
var table_object = {
table1: "hello world",
table1_name: "greetings_english.html",
table2: "hola",
table2_name: "greetings_spanish.html",
table3: "Bonjour",
table3_name: "greetings_french.html"
};
objKeys.forEach(function(item) {
console.log(table_object[item])
})
Ответ 6
Я думаю, что лучший способ сделать это в этом случае - сделать ваш объект таким:
var table = {
"hello world": "greetings_english.html",
"hola": "greetings_spanish.html",
"bonjour": "greetings_french.html"
};
for( var i in table ) {
console.log( i );
console.log( table[ i ] );
}
Ответ 7
Вам не нужны модные фильтры или регулярные выражения для выполнения такой простой задачи! Игнорируйте эти вводящие в заблуждение ответы и начните использовать всю мощь JavaScript!
Вы должны использовать метод Object.defineProperty()
на вашем объекте и установить в enumerable: false
все свойства, которые вы не хотите перебирать. Таким образом, вы также отключаете свое соглашение об именах от своей логики. Позвольте мне показать вам:
// Defining iterable properties. This ones will be returned
// by Object.keys()
var table_object = {
table1: "hello world",
table2: "hola",
table3: "Bonjour",
// It works even if you declare them in advance
// table1_name: "greetings_english.html",
// table2_name: "greetings_spanish.html",
// table3_name: "greetings_french.html",
};
// Declaring the not iterable properties. They can still be
// accessed, but they will not be iterated through
Object.defineProperty(table_object, "table1_name", {
// delete the next line if you have already declared it
value: "greetings_english.html",
enumerable: false
});
Object.defineProperty(table_object, "table2_name", {
// delete the next line if you have already declared it
value: "greetings_spanish.html",
enumerable: false
});
Object.defineProperty(table_object, "table3_name", {
// delete the next line if you have already declared it
value: "greetings_french.html",
enumerable: false
});
// Iterating through the object using for ... in, which iterates
// over the keys
for (var key in table_object) {
console.log(table_object[key]);
}