繁体   English   中英

如何检查对象数组是否具有相同的值

[英]How can I check if the array of objects have same values

在这里,我的数组包含相同的地址ID,但具有不同的phoneType和phonenumber。 我需要一些遍历数组的帮助,当adressid相同时,我想获取phoneType和phonenumber。 比较数组中的对象值时,我一直陷于困境。

var userdetail = [
    { name: "Steve",   adressID: "1", phoneType:"main",  phonenumber:"12222228"},
    { name: "Steve",   adressID: "1", phoneType:"fax" ,  phonenumber:"55555668"},
    { name: "Peter",   adressID: "2", phoneType:"main",  phonenumber:"67544442"},
    { name: "Elaine",  adressID: "3", phoneType:"main",  phonenumber:"87877778"},
    { name: "Elaine",  adressID: "3", phoneType:"mobile",phonenumber:"23234678"},
    { name: "Steve",   adressID: "1", phoneType:"work",  phonenumber:"42222228"},
];

我的预期应该是

     {
  "name": "Steve",
  "adressID": "1",
  "phoneType": "main",
  "phonenumber": "12222228"
},
{
  "name": "Steve",
  "adressID": "1",
  "phoneType": "fax",
  "phonenumber": "55555668"
},
{
  "name": "Steve",
  "adressID": "1",
  "phoneType": "work",
  "phonenumber": "42222228"
}

创建一个对象,其中addressID将为键,并且此键的值将为具有与addressID相同键的对象数组

 var userdetail = [{ name: "Steve", adressID: "1", phoneType: "main", phonenumber: "12222228" }, { name: "Steve", adressID: "1", phoneType: "fax", phonenumber: "55555668" }, { name: "Peter", adressID: "2", phoneType: "main", phonenumber: "67544442" }, { name: "Elaine", adressID: "3", phoneType: "main", phonenumber: "87877778" }, { name: "Elaine", adressID: "3", phoneType: "mobile", phonenumber: "23234678" }, { name: "Steve", adressID: "1", phoneType: "work", phonenumber: "42222228" }, ]; var result = userdetail.reduce(function(res, o) { res[o.adressID] || (res[o.adressID] = []); // if the adressID key doesn't exist, set it to be an array res[o.adressID].push(o); // push the object into the array return res; }, {}); console.log(result) 

这是一种方法,首先对数组进行分组,从SO答案中获取函数,请在此处参考,然后访问所需的任何名称,请参考以下代码段!

 var userdetail = [{ name: "Steve", adressID: "1", phoneType: "main", phonenumber: "12222228" }, { name: "Steve", adressID: "1", phoneType: "fax", phonenumber: "55555668" }, { name: "Peter", adressID: "2", phoneType: "main", phonenumber: "67544442" }, { name: "Elaine", adressID: "3", phoneType: "main", phonenumber: "87877778" }, { name: "Elaine", adressID: "3", phoneType: "mobile", phonenumber: "23234678" }, { name: "Steve", adressID: "1", phoneType: "work", phonenumber: "42222228" }, ]; var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); }; var data = groupBy(userdetail, 'name'); console.log(data); //access values for steve for (var k of data['Steve']) { console.log(k['phonenumber']); console.log(k['phoneType']); } 
 .as-console { height: 100%; } .as-console-wrapper { max-height: 100% !important; top: 0; } 

我喜欢Lodash这样的事情(数据争吵)...

var results = _.filter(userdetail, {name: 'Steve'});

暂无
暂无

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

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