我有一个对象'objlist'列表和一个id'idlist'列表。
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
我希望第一个列表中的对象对第二个列表中的每个ID都具有'visible'值为'true',其余值为'false'。
当我在循环中尝试循环时,我得到的结果不正确。如何获得正确的清单。
我的尝试:
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
_.each(idlist, function(p) {
_.each(objlist, function(obj) {
if (obj.id == p) {
obj.visible = true;
} else {
obj.visible = false;
}
});
});
console.log(objlist)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
当后续循环中的条件中断时,会发生变化。
答案 0 :(得分:1)
首先,为什么你的代码不起作用:
您首先在idList
上循环,然后在objlist
上循环。所以这里的问题是,在每次迭代中,只有一个对象可以对条件成立。因此,最后一个是true
。
以下是使用下划线的示例:
注意:其他答案已经显示使用vanilla JS的方法,但由于您已经使用了下划线,您可以检查这种方法
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
_.each(objlist, function(p) {
p.visible = _.contains(idlist, p.id)
});
console.log(objlist)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
答案 1 :(得分:0)
使用forEach
和includes
objlist.forEach( s => (s.visible = idlist.includes( s.id ) ) );
<强>演示强>
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
objlist.forEach( s => (s.visible = idlist.includes( s.id ) ) );
console.log(objlist);
&#13;
答案 2 :(得分:0)
您可以使用array.prototype.map
和array.prototype.includes
:
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
var result = objlist.map(e => (e.visible = idlist.includes(e.id), e));
console.log(result);
&#13;
答案 3 :(得分:0)
尝试以下
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
objlist = objlist.map(function(item){
item.visible = idlist.indexOf(item.id) !== -1;
return item;
});
console.log(objlist);
&#13;
答案 4 :(得分:0)
这很有效。
var objlist = [{id:1, visible:true},{id:2, visible:false},{id:3, visible:false}];
var idlist = [1, 3];
for(var index in objlist)
{
var obj = objlist[index];
obj.visible = idlist.includes(obj.id);
}
console.log(objlist);
&#13;