繁体   English   中英

如何添加对象数组属性?

[英]How to add an object array property?

当读取属性name ,就把user3的属性的user2和相同属性到一个对象的属性name等于a值。

我要打印出来:

[
  {
    name: 'b',
    user1: 'haha',
  },
  {
    name: 'a',
    user2: 'apple',
    user3: 'xiaomi'
  }
]

我的代码:

 var data = [{ name: 'b', user1: 'haha', }, { name: 'a', user2: 'apple', }, { name: 'a', user3: 'xiaomi' } ] var arr = [] for (var i = 0; i < data.length; i++) { console.log(data[i].name) } 

下面的代码将首先使您知道相同的name字段,然后将其合并。

var make_unique = function(xs, key) {
  // find same name fields
  let tmp_result =  xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
  // merge the same ones
  return Object.keys(tmp_result).map(item => {
     return tmp_result[item].reduce(function(rv, x) {
        return Object.assign(rv,x)
     }, {});
  })
};

调用它:

make_unique(data,'name')

您可以使用for循环查找相同的元素,然后将其分配给另一个,然后使用splice方法从数组中删除找到的元素

 var data = [{ name: 'b', user1: 'haha', }, { name: 'a', user2: 'apple', }, { name: 'a', user3: 'xiaomi' } ] for (var i=0 ; i<data.length;i++){ for(var j=i+1;j<data.length;j++){ if(data[i].name===data[j].name){ Object.assign(data[i],data[j]) data.splice(j,1) } } } console.log(data) 

reduce数据以创建一个键设置为名称值的对象,然后返回该对象的Object.values

 var data = [{ name: 'b', user1: 'haha' }, { name: 'a', user2: 'apple' }, { name: 'a', user3: 'xiaomi' }]; function groupByName(arr) { return Object.values(data.reduce((acc, c) => { const { name, ...rest } = c; acc[name] = acc[name] || {}; acc[name] = { ...acc[name], name, ...rest }; return acc; }, {})); } const output = groupByName(data); console.log(output); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM