js数组筛选过滤

发布于 2022-09-05 04:32:11 字数 727 浏览 22 评论 0

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']}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

失而复得 2022-09-12 04:32:12

引入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);
梦晓ヶ微光ヅ倾城 2022-09-12 04:32:12

这个用filter很好实现的
Nodejs中的一些小trick - QueenKing - SegmentFault https://segmentfault.com/a/11...

世态炎凉 2022-09-12 04:32:12
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…用了三元表达式…

夜深人未静 2022-09-12 04:32:12
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

长安忆 2022-09-12 04:32:12
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"}
];

res = arr.filter(e=>e.name==='xiaoming').reduce((all,e)=>{
    return {name: 'xiaoming',id:[...all.id , e.id]}
},{name:'xiaoming',id:[]})


console.log(res);

// output
// { name: 'xiaoming', id: [ '123', '456', '789' ] }

羁客 2022-09-12 04:32:11

首先,你给的参考结果前半句 [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'] // 过滤出你要的答案
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文