如何为JSON数组中的每个对象添加指定属性?
解决方法:为JSON数组中每个对象添加属性
嗨,我懂你的问题啦——你本来想给数组里每一个已有的对象都加上identifier属性,但用push方法时,是往数组末尾新增了一个独立的对象,这完全不是你想要的效果~
为什么你的代码不对?
你用的Data.push({"identifier" : "userid"});是数组的追加方法,作用是把新对象添加为数组的第四个元素,而不是修改数组里已有的三个对象,所以才会得到不符合预期的结果。
正确的两种实现方式
方式1:直接修改原数组(用forEach遍历)
如果不需要保留原数组的原始状态,可以用forEach循环遍历数组中的每个对象,直接给它们添加属性:
// 你的原始数据 const data = [{"stock1":"aaaa","stock2":"bbbb"},{"stock1":"aaaa","stock2":"bbbb"},{"stock1":"aaaa","stock2":"bbbb"}]; // 遍历每个对象,添加属性 data.forEach(item => { item.identifier = "userid"; }); // 输出后就是你想要的结果 console.log(data);
因为对象是引用类型,所以这个操作会直接修改原数组里的对象。
方式2:生成新数组(用map,不修改原数组)
如果不想改动原始数组,可以用map方法创建一个包含新属性的新数组,这种方式更符合函数式编程的风格:
const data = [{"stock1":"aaaa","stock2":"bbbb"},{"stock1":"aaaa","stock2":"bbbb"},{"stock1":"aaaa","stock2":"bbbb"}]; // 生成新数组,每个元素是原对象的副本加上新属性 const newData = data.map(item => { return {...item, identifier: "userid"}; }); console.log(newData);
这里用了ES6的展开运算符...复制原对象的所有属性,再添加新的identifier属性,不会影响原数组的内容。
两种方法都能得到你期望的结果:
[{"stock1":"aaaa","stock2":"bbbb","identifier":"userid"},{"stock1":"aaaa","stock2":"bbbb","identifier":"userid"},{"stock1":"aaaa","stock2":"bbbb","identifier":"userid"}]
内容的提问来源于stack exchange,提问作者user2458645
相关产品推荐
相关产品推荐

