#javascript #node.js
#javascript #node.js
Вопрос:
Как я могу применить фильтр внутри ‘для…в’ заявлении?
Другими словами, я хочу повторить только некоторые ключи объекта.
Это довольно просто с for...of
помощью оператора, например:
for (const key of Object.keys(obj).filter(key => key.startsWith("0x"))) {
...
}
Но я хочу использовать for (const key in obj)
вместо этого.
Как я могу применить a filter
внутри этого оператора?
Комментарии:
1. Для этого вам потребуется создать новый объект….
2. на самом деле
for-in
цикл используется для разных целей.for(const value in obj)
. Я думаю, вы поняли мою точку зрения.3. @SifatHaque: Нет, я на самом деле не понимаю вашу точку зрения. Не могли бы вы уточнить?
4. @SifatHaque Нет, цикл for-in перебирает ключи, а не значения.
5. ИБП, я неправильно понял. Спасибо за исправление.
Ответ №1:
Просто добавьте if
оператор после вашего for(...)
выражения:
for (const key in obj) if (key.startsWith("0x")) {
...
}
Ответ №2:
Не уверен, почему вы хотели бы это сделать, но вы можете использовать Object.fromEntries и Object.entries
const obj = {
'0x123': { hello: 1 },
'0x124': { hello: 1 },
'123': { hello: 1 },
}
const foo = Object.fromEntries(Object.entries(obj).filter(arr => arr[0].startsWith("0x")));
for (const data in foo) {
console.log(data);
}
Похоже, что просто проверка его внутри цикла имела бы больше смысла
const obj = {
'0x123': { hello: 1 },
'0x124': { hello: 1 },
'123': { hello: 1 },
};
for (const data in obj) {
if (!data.startsWith("0x")) continue;
console.log(data);
}
Комментарии:
1. Я мог бы также просто использовать
for (const key of Object.keys(obj))
, как я объяснил в своем вопросе, хотя я начинаю думать, что моя цель не была должным образом разъяснена — я надеялся избежатьObject.keys
функции, а не избегатьof
оператора, как можно было бы интерпретировать из вопроса.2. Поэтому, чтобы избежать этого, вы просто выполняете проверку внутри, и если ключ не совпадает, вы пропускаете эту итерацию.
3. Да, это добавление
if
утверждения, которое я надеялся использоватьfilter
и сделать его «аккуратнее». В любом случае спасибо 🙂