簡體   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