При погружении в итерации сложно программировать. Петли for
и forEach
просты в обращении. Но, начав с map
, filter
, reduce
, я понятия не имел, о чем они говорили.
var arr = [
{'key': 13, 'jason': 12},
{'mia': 12, 'jeremy': 12},
{'teddy': 11, 'key': 13},
{'mia': 12, 'key': 12},
];
function findObject(array, key, target){
var res = [];
var flag = false;
array.forEach(ar => {
try{
// iterate dictionary by key
for(var k in ar){
// check key matches and value matches
if(k === key && ar[k] === target){
flag = true;
}
}
// use flag as an indicator for adding new object
if(flag){
res.push(ar);
flag = false;
}else{
res.push(null);
}
}catch(err){}
});
return res;
}
console.log(findObject(arr, 'key', 13));
- Object.keys () возвращает массив всех ключей объекта
- массив быстрее повторяется функцией forEach
- концепция использования логического флага для неконтролируемых условных
- try {} catch (err) {} обрабатывает исключения
Приведенный выше код сложен по структуре, но лог c предельно ясно. мы сначала выполняем итерацию по массиву, а затем повторяем атрибуты объектов словаря, так как мы используем только pu sh данные один раз в течение каждого array.forEach
, используем флаг, чтобы указать, следует ли использовать pu sh data или pu sh null.
var arr = [
{'key': 13, 'jason': 12},
{'mia': 12, 'jeremy': 12},
{'teddy': 11, 'key': 13},
{'mia': 12, 'key': 12},
];
var key = 'key';
var target = 13;
var result = arr.map(ar=>{return (Object.keys(ar).includes(key) && ar[key] === target) ? ar : null});
console.log(result);
- map () выполняет итерацию по массиву и присваивает каждому измененное значение
- условие? true_conduct: false_conduct: сокращение для оператора if
приведенный выше код обеспечивает однострочный способ достижения решения. Но это сложно понять. å Как новичок, я предлагаю вам написать больше кода самостоятельно. после того, как вы полностью справитесь с управлением итерацией for
и условными операторами if
, вы поймете, насколько просты сокращенные методы, такие как map
.