鍍金池/ 問答/PHP  HTML/ 計算數(shù)組中相同元素的個數(shù)

計算數(shù)組中相同元素的個數(shù)

如下面的數(shù)組, 希望得到[{name: 'zhang', conut: 4},{name: 'wang', conut: 2},{name: 'liu', conut: 2}],或者[{zhang: 4},{wang: 2},{liu: 2}]謝謝了

let arr= [
            {name: 'zhang', age: '20'},
            {name: 'wang', age: '22'},
            {name: 'zhang', age: '20'},
            {name: 'liu', age: '23'},
            {name: 'liu', age: '23'},
            {name: 'wang', age: '22'},
            {name: 'zhang', age: '20'},
            {name: 'zhang', age: '20'},
        ]
回答
編輯回答
舊顏

你應(yīng)該了解一下數(shù)組去重

let obj = {};
arr.map((c) => {
    let str = JSON.stringify(c);
    if(!obj[str]){
        obj[str] = c
    }
})
let new_arr = Object.keys(obj).map((k) => obj[k]);
console.log(new_arr)
2017年8月25日 01:57
編輯回答
膽怯
const obj = {};
arr.forEach(i => {
    if(obj[i.name]) {
        obj[i.name].count += 1;
    } else {
        obj[i.name] = {
            name: i.name,
            count: 1
        }
    }
});

const result = Object.keys(obj).map(name => obj[name]);
2017年9月27日 01:52
編輯回答
伴謊
<script>
    let arr= [
            {name: 'zhang', age: '20'},
            {name: 'wang', age: '22'},
            {name: 'zhang', age: '20'},
            {name: 'liu', age: '23'},
            {name: 'liu', age: '23'},
            {name: 'wang', age: '22'},
            {name: 'zhang', age: '20'},
            {name: 'zhang', age: '20'},
    ]
    var map = {},
        newList = [];
    for (var i = 0; i < arr.length; i++) {
      var obj = arr[i];
      if (!map[obj.name]) {
        newList.push({
          name: obj.name,
          count: 1
        });
        map[obj.name] = obj;
      } else {
        for (var j = 0; j < newList.length; j++) {
          if (newList[j].name == obj.name) {
            newList[j].count++;
            break;
          }
        }
      }
    }
    console.log("新數(shù)組", newList)

</script>
2018年4月16日 06:17
編輯回答
心悲涼
// 第一步生成一個統(tǒng)計過的對象
const allNames = arr.reduce((all, next, index) => {
  if (next.name in all) {
    all[next.name]  ++ 
  } else {
    all[next.name] = 1
  }
  return all
}, {})
let newArr = []
// 第二部把對象push到數(shù)組中
for (const key in allNames) {
  if (allNames.hasOwnProperty(key)) {
    let currentObj = {}
    currentObj[key] = allNames[key]
    newArr.push(currentObj)
  }
}
console.log(newArr)

clipboard.png

2017年9月13日 13:38
編輯回答
笑浮塵
let arr = [
  {name: 'zhang', age: '20'},
  {name: 'wang', age: '22'},
  {name: 'zhang', age: '20'},
  {name: 'liu', age: '23'},
  {name: 'liu', age: '23'},
  {name: 'wang', age: '22'},
  {name: 'zhang', age: '20'},
  {name: 'zhang', age: '20'},
];

const result = arr.reduce((list, o) => {
  const item = list.find(n => n.name === o.name && n.age === o.age);
  !item ? list.push({...o, count: 1}) : item.count += 1;
  return list;
}, []);

console.log(result)
2017年1月2日 19:26
編輯回答
尋仙
var _obj = {},_arr = [];
[
    {name: 'zhang', age: '20'},
    {name: 'wang', age: '22'},
    {name: 'zhang', age: '20'},
    {name: 'liu', age: '23'},
    {name: 'liu', age: '23'},
    {name: 'wang', age: '22'},
    {name: 'zhang', age: '20'},
    {name: 'zhang', age: '20'},
].forEach((v)=>{
    if(_obj[v.name]){
        _obj[v.name]++
    }else{
        _obj[v.name]=1
    }
})
Object.keys(_obj).map(v=>({name:v,count:_obj[v]}))

clipboard.png

2018年5月1日 16:24