js数组筛选过滤

var arr = [
        {name:'xiaoming',id:"123"},
        {name:'xiaoming',id:"456"},
        {name:'xiaoming',id:"789"},
        {name:'xiaohua',id:"101112"},
        {name:'xiaowang',id:"131415"},
        {name:'xiaohong',id:"161718"}
    ];
    var obj = [];
    for(var i=0; i<arr.length; i++){
        obj[arr[i]['name']] = arr[i]['id'];
    }
 console.log(obj)

我想把'name'为'xiaoming'的id过滤出来

这是现在的结果,我本来想objarr[i].push() 但用不了这个方法,

不要用if或别的什么判断

,有没有直接暴力的枚举算法

[xiaoming: "789", xiaohua: "101112", xiaowang: "131415", xiaohong: "161718"]

我想实现的是[xiaoming: ['123','456','789']]
或者{name:'xiaoming',id:['123','456','789']}

阅读 17.5k
5 个回答

首先,你给的参考结果前半句 [xiaoming: ['123','456','789']] 语法上就有问题,我想你是要后半句 {xiaoming: ['123','456','789']}

实现过程如下(es6 语法)

const arr = [] // 内容省略
const obj = {}
arr.forEach(item => {
    const name = item.name
    const items = obj[name] || [] // 判断是否要初始化
    items.push(item.id)
    obj[name] = items
})

const xiaoming = obj['xiaoming'] // 过滤出你要的答案

引入jq文件

var arr = [
        {name:'xiaoming',id:"123"},
        {name:'xiaoming',id:"456"},
        {name:'xiaoming',id:"789"},
        {name:'xiaohua',id:"101112"},
        {name:'xiaowang',id:"131415"},
        {name:'xiaohong',id:"161718"}
    ];

var arrnew = [];
arrnew["xiaoming"] = $.map(arr,item => { if(item.name == "xiaoming") return item.id; });
console.log(arrnew);

或者

 var arrNew = { name: 'xiaoming', id: $.map(arr,item => { if(item.name == "xiaoming") return item.id; }) };
 console.log(arrNew);
var arr = [
        {name:'xiaoming',id:"123"},
        {name:'xiaoming',id:"456"},
        {name:'xiaoming',id:"789"},
        {name:'xiaohua',id:"101112"},
        {name:'xiaowang',id:"131415"},
        {name:'xiaohong',id:"161718"}
    ];
var obj = {};
arr.forEach(person => {
    obj[person.name] = !obj[person.name] ?  [person.id] : [ ...obj[person.name], person.id];
})

没用if…用了三元表达式…

var arr = [
        {name:'xiaoming',id:"123"},
        {name:'xiaoming',id:"456"},
        {name:'xiaoming',id:"789"},
        {name:'xiaohua',id:"101112"},
        {name:'xiaowang',id:"131415"},
        {name:'xiaohong',id:"161718"}
    ];

var obj={};

obj.xiaoming=arr.filter(item=>item.name=='xiaoming').map(item=>item.id);

console.log(obj);

mycodepen

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