我想知道,如果JavaScript中的鍵存在,如何創建一個新的陣列物件。
我有兩個陣列物件,arr1和arr2。在arr2中,如果c的值為真,并且arr1的鍵和一個值相等,就把它推到一個新的陣列物件。如果鍵值的arr2為真,并且與arr1的鍵值匹配,那么在JavaScript中推送到一個新的陣列。
var arr1 = {
data:[
{id:1, place: "IN", 年份: "2020", mode: "ON"}。
{id:3, place: "TH", 年份: "2022", mode: "OFF"}。
{id:5, place: "AU", 年份: "2025", mode: "ON"}。
]
};
var arr2=[
{a: "place", c: true}。
{a: "year", c: true}。
{a: "模式", c: false}。
]
var finals = [] 。
var result = arr1.data.map(e=> /span>{
arr2.forEach(i=>/span>{
if(i.c ==true && Object.keys(e)){
finals.push(e)。
}
})
return finals
})
預期輸出:
[
{place: "IN", 年份: "2020"}。
{地點: "TH", 年份: "2022"}。
{地點: "AU", 年份: "2025"}。
]
uj5u.com熱心網友回復:
你幾乎是在那里。
arr1.data.map創建一個新陣列,- 對于arr1中的每個item,創建一個新的物件
newObj, - 在
arr2中的每個key上回圈 。
- 添加
key.a與item中的相應值,如果key.c為真 。
- 回傳
newObj。
var arr1 = {
data:[
{id:1, place: "IN", 年份: "2020", mode: "ON"}。
{id:3, place: "TH", 年份: "2022", mode: "OFF"}。
{id:5, place: "AU", 年份: "2025", mode: "ON"}。
]
};
var arr2=[
{a: "place", c: true}。
{a: "year", c: true}。
{a: "模式", c: false}。
];
var result = arr1.data. map(item => { // 1
let newObj = {}; // 2
arr2.forEach(span class="hljs-params">key => { / 3
if (key.c) { / 4
newObj[key.a] = item[key.a]
}
});
return newObj // 5
})
console.log(result)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
邏輯
arr2中獲取你所需要的鍵,條件是node.c === true。map通過arr1.data從這個陣列中的每個物件,創建一個新的物件,其鍵值是我們從上述邏輯中得到的。
var arr1 = {
data: [
{ id: 1, place: "IN", 年份: "2020", mode: "ON" },
{ id: 3, place: "TH", 年份: "2022", mode: "OFF" },
{ id: 5, place: "AU", 年份: "2025", mode: "ON" }
]
}
var arr2 = [
{ a: "place", c: true },
{ a: "year", c: true },
{ a: "模式", c: false },
];
const keys = arr2.filter((node) => node。 c).map((node) =>/span> node.a) 。
var result = arr1.data.map(span class="hljs-params">e => {
const obj = keys.reduce((acc, curr) =>/span> {
acc[curr] = e[curr];
return acc;
}, {});
return obj;
})
console.log(result);
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
可以使用.map()和.reduce()完成:
var arr1 = {
data: [
{id: 1, place: "IN", 年份: "2020", mode: "ON"}。
{id: 3, place: "TH", 年份: "2022", mode: "OFF" },
{id: 5, place: "AU", 年份: "2025", mode: "ON" },
]
};
var arr2 = [
{a: "place", c: true}。
{a: "year", c: true}。
{a: "模式", c: false}。
];
const result = arr1.data.map(item =>)
Object.keys(item).reduce((acc, key) =>/span> {
const isEnabled = arr2. some(({a, c}) => a == key && c == true) 。
return isEnabled ? { ...acc, [key]: item[key]} : acc;
}, {})
);
console.log(result);
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
一種reduce和forEach方法:
let arr1 = { data: [{ id: 1, place: "IN", 年份: "2020", mode: "ON" }, { id: 3, place: "TH", 年份: "2022", mode: "OFF" }, { id: 5, place: "AU", 年份: "2025", mode: "ON" }] 。};
let arr2 = [{ a: "place", c: true }, { a: "year", c: true }, { a: "模式", c: false }, ].
let finals = arr1.data.reduce((acc, itm) => /span> {
let obj = {};
arr2.forEach(({a, c}) => {
if (c) obj[a] = itm[a];
})
acc.push(obj)
return acc.
}, [])
console.log(finals)
<iframe name="sif4" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
忍不住要添加另一個版本,使用Object.fromEntries
。const arr1 = { data: [{id:1, place: "IN", 年份: "2020", mode: "ON"}, {id: 3, place: "TH", 年份: "2022", mode: "OFF"}, {id: 5, place: "AU", 年份: "2025", mode: ]};
const arr2=[ {a: "place", c: true}, {a: "year", c: true}, {a: "模式", c: false}, ]
const props = arr2.flatMap(p=> p。 c ? p.a : [] )。)
const finals = arr1.data. map(span class="hljs-params">o=> Object. fromEntries(props.map(p=>[p,o[p]] )))。
console.log(finals);
<iframe name="sif5" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322437.html
標籤:
