Примените фильтр внутри ‘для…в’ инструкции

#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 и сделать его «аккуратнее». В любом случае спасибо 🙂