[英]changing an array of javascript objects with a single key to an array that contains the objects' data
[英]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#map
, Array#reduce
, Array#filter
, Set
和Set#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());
您可以在每個數據數組上使用reduce
和concat
,並檢查每個項目的計數。
最后,檢查數組中的所有對象是否包含該項,如果是,則返回該項。
請注意,如果要在數組中的所有對象中提取具有相同匹配項的項,則此函數有效。
如果某個項目有重復項但不符合上述條件,則不會提取該項目。
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.