如何快速操作js对象列表?

var items=[
{id:3,name:'t1',mobile:'13442854167',area:'江苏 南京 秦淮区',address:'b11光彩65号',is_default:true},

{id:9,name:'t22',mobile:'13434567678',area:'北京 海淀区 ',address:'通州运河大街45号',is_default:false},

{id:3,name:'t33',mobile:'13434567678',area:'北京 潮阳区 ',address:'通州运河大街45号',is_default:false},
];

上面例子,列表里可能有很多js对象,需求是将id:3的对象is_default设置为true,其他对象设置为false,除了循环有快速的修改方法吗?

阅读 5.5k
6 个回答

楼上正解。
不用遍历的前提是,你知道id=3的对象在数组中的位置,但是为了找到这些对象,只有遍历。
items.forEach(function(v){ v.is_default = v.id == 3 ? true : false;})

题目的要求是不用“循环”而给每个对象设置属性。如果这里的循环是指“遍历”的话,几乎是无解的。如果是指for()循环的话,你可以事实Array对象的forEach属性,但本质上还是遍历了每个对象。

不遍历貌似没有别的方法可以找到id=3的集合,不行就让后端传一个id=3的集合过来,然后操作过后再组装成一个数组,不过就有点得不偿失了

试试看map方法啦。

items.map(function(item){
    if( item.id == 3) 
        item.is_default = true;
    else
        item.is_default = false;
        
    return item;
})

代码层面,楼上的几位都回答完了。
业务上如果说需要多次从这个数组中根据ID查找对象并操作,可以最先循环一次,准备一个Map(Object)

var map = {};
items.forEach(function(v){
    map[v.id] = v
});

之后map[id]拿到这个对象就可以了。

感谢大家回答,map也不错,实际环境比较杂乱,没有内置函数只好用forEach了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题