繁体   English   中英

JavaScript对象数组包含相同的数组数据

[英]JavaScript array of objects contains the same array data

我尝试将所有相同的数据值放入对象数组中。 这是我的意见:

var a = [{
    name: "Foo",
    id: "123",
    data: ["65d4ze", "65h8914d"]
  },
  {
    name: "Bar",
    id: "321",
    data: ["65d4ze", "894ver81"]
  }
]

我需要一个结果:

["65d4ze"]

我尝试循环我的对象以获得此输出,但我完全迷失了......我不知道如何知道结果是否存在于所有数据数组中。

 var a = [{ name: "Foo", id: "123", data: ["65d4ze", "65h8914d"] }, { name: "Bar", id: "321", data: ["65d4ze", "894ver81"] } ], b = [], c = [] a.forEach(function(object) { b.push(object.data.map(function(val) { return val; }) ); }); console.log(b); 

您可以使用Array#mapArray#reduceArray#filterSetSet#has映射data并获取公共值。

 var array = [{ name: "Foo", id: "123", data: ["65d4ze", "65h8914d"] }, { name: "Bar", id: "321", data: ["65d4ze", "894ver81"] }], key = 'data', common = array .map(o => o[key]) .reduce((a, b) => b.filter(Set.prototype.has, new Set(a))); console.log(common); 

您可以使用Array#filter方法。 通过检查所有其他对象属性(数组)中是否存在值来过滤第一个数组,使用Array#every方法检查所有剩余数组中是否存在值。

let res = a[0].data.filter(v => a.slice(1).every(a => a.data.includes(v)));

 var a = [{ name: "Foo", id: "123", data: ["65d4ze", "65h8914d"] }, { name: "Bar", id: "321", data: ["65d4ze", "894ver81"] } ]; let res = a[0].data.filter(v => a.slice(1).every(a => a.data.includes(v))); console.log(res) 

 var a = [{ name: "Foo", id: "123", data: ["65d4ze", "65h8914d"] }, { name: "Bar", id: "321", data: ["65d4ze", "894ver81"] } ], b = {}; a.forEach(function(i) { i.data.forEach(function(j) { if (!b.hasOwnProperty(j)) { b[j] = 0; } b[j] = b[j] + 1; }); }); c = [] for (var i in b) { if (b.hasOwnProperty(i)) { if (b[i] > 1) { c.push(i) } } } console.log(c); 

使用数组中的flat函数:

 var a = [{ name: "Foo", id: "123", data: ["65d4ze", "65h8914d"] }, { name: "Bar", id: "321", data: ["65d4ze", "894ver81"] } ], b = [], c = [] a.forEach(function(object) { b.push(object.data.map(function(val) { return val; }) ); }); console.log(b.flat()); 

您可以在每个数据数组上使用reduceconcat ,并检查每个项目的计数。

最后,检查数组中的所有对象是否包含该项,如果是,则返回该项。

请注意,如果要在数组中的所有对象中提取具有相同匹配项的项,则此函数有效。

如果某个项目有重复项但不符合上述条件,则不会提取该项目。

 let a = [{name: "Foo",id: "123",data: ["65d4ze", "65h8914d"]},{name: "Bar",id: "321",data: ["65d4ze", "894ver81"]}] let arr = a.reduce((prev,next) => prev.data.concat(next.data)) let counts = {}; let result = []; for (var i = 0; i < arr.length; i++) { var num = arr[i]; counts[num] = counts[num] ? counts[num] + 1 : 1; } for (let i in counts) { if (counts[i] === a.length) { result.push(i) } } console.log(result) 

暂无
暂无

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

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