我试图通过JS对象(1)来查明另一个对象(2)上是否存在值并返回找到值的对象(2)。
var returnObj = [];
selectedValues.forEach(function(value, key){
var found = valuesObject.some(function (el) {
if (el.item_id === value){
return el.item_id;
}
});
console.log(found);
});
在这种情况下,我只能通过获取true / false来查明它是否存在,我也尝试过这个
var returnObj = [];
selectedValues.forEach(function(value, key){
console.log(_.intersection(valuesObject, value));
});
但在这种情况下它只返回空数组而不是object(2)值找到的值(1)值
答案 0 :(得分:1)
如果您在return
来电中进行.forEach
,则只会退回传递给forEach
功能的回调,而不是您的附加功能。你可以使用标准的for循环,在那里你可以退出。
假设您要在第二个对象中找到“值”列表:
const values = [/*...*/];
Object.keys(secondObject).forEach(key => {
const value = secondObject[key];
if (values.includes(value)) {
/* secondObject has a property with the values you are looking for */
}
});
Object.keys
为您提供了一个对象的属性键数组。根据您的环境,您也可以使用Object.values()
,这将返回给定对象的值数组(而不是键)。
答案 1 :(得分:1)
保持简单和基本:
for (var i = 0; i < selectedValues.length; i++) {
for (var j = 0; j < valuesObject.length; j++) {
if (selectedValues[i] === valuesObject[j].item_id) {
return valuesObject[j].item_id;
}
}
}
如果您更喜欢一行:
return selectedValues.length && selectedValues.map(value => valuesObject.find(v => v.item_id === value))[0]
答案 2 :(得分:0)
也许我的设置错误,但看到returnObj
是一个数组,filter
似乎是一个不错的选择。例如,与Set
:
let set = new Set(valuesObject.map(o=>o.item_id)),
returnObj = selectedValues.filter(s=>set.has(s));
示例:
let selectedValues = ['aaa', 'bbb', 'ccc', 'ddd'],
valuesObject = [ {item_id:'ddd'}, {item_id:'eee'}, {item_id:'bbb'}];
let set = new Set(valuesObject.map(o=>o.item_id)),
returnObj = selectedValues.filter(s=>set.has(s));
console.log(returnObj);
&#13;