У меня есть массив с несколькими объектами в виде записей (коллекция), и я хочу проверить, есть ли другой объект-источник в этих объектах с одной записью. Если это так, я хочу вернуть массив со всеми объектами, которые выполняют это условие. Вот код с примером:
function whatIsInAName(collection, source) {
var arr = [];
var sourceEntries = Object.entries(source);
for (var i = 0; i < collection.length; i++) {
for (var j = 0; i < sourceEntries.length; i ++) {
if((collection[i].hasOwnProperty(sourceEntries[j][0]))) {
if(collection[i][sourceEntries[j][0]] == sourceEntries[j][1]) {
/*what happens here*/
}
}
arr.push(collection[i]);
}
}
return arr;
}
print(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));
Очевидно, я не знаю, что положить туда, где написано ("что здесь происходит"). Проблема в том, что второй для цикла и оба условия должны быть true
поэтому команда push имеет смысл.
Я ценю любой намек или помощь, спасибо!
PS Я знаю, что это, вероятно, не самый изящный способ решить эту проблему так же рад другим решениям.
Здесь .filter
функция .filter
:
function whatIsInAName(collection, source) {
return collection.filter((obj) => {
for (var prop in source) {
if (source[prop] !== obj[prop]) {
// The source property is not found in obj - no good!
return false;
}
// The source property matches one of the obj properties - keep going!
}
// Made it through the checks! You've got a match!
return true;
});
}
console.log(whatIsInAName([{
"a": 1,
"b": 2
}, {
"a": 1
}, {
"a": 1,
"b": 2,
"c": 2
}], {
"a": 1,
"b": 2
}));
Или, если вы склонны использовать библиотеку для этого, это можно сделать очень просто с Lodash:
var collection = [{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }],
source = { "a": 1, "b": 2 };
console.log(_.filter(collection, source));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>