我有這樣的陣列資料。
const dataSample = [
{
"staff": 1000,
"name": "Apple",
"logo_url": "biten apple",
"down":"yes"
},
{
"staff": 500,
"name": "Microsoft",
"logo": "squares",
"down":"no"
},
{
"staff": 4000,
"name": "Google",
"logo_url": "letter",
"down":"no"
},
{
"staff": 2000,
"name": "Coca Cola",
"logo": "letters",
"down":"yes"
},
];
我有另一個陣列
const filterArr = [“name”, “down”];
我想要這樣的輸出?
[
{
"name": "Apple",
"down": "yes"
},
{
"name": "Microsoft",
"down": "no"
},
{
"name": "Google",
"down": "no"
},
{
"name": "Coca Cola",
"down": "yes"
},
];
uj5u.com熱心網友回復:
dataSample在您的情況下,映射原始陣列。- 使用Object.entries將每個物件轉換為陣列,并過濾??掉查找陣列 ( ) 中存在鍵的項
filterArr。 - 使用Object.fromEntries將陣列轉換回物件
const dataSample = [
{ staff: 1000, name: "Apple", logo_url: "biten apple", down: "yes" },
{ staff: 500, name: "Microsoft", logo: "squares", down: "no" },
{ staff: 4000, name: "Google", logo_url: "letter", down: "no" },
{ staff: 2000, name: "Coca Cola", logo: "letters", down: "yes" },
],
filterArr = ["name", "down"],
output = dataSample.map((o) =>
Object.fromEntries(
Object.entries(o).filter(([k, v]) => filterArr.includes(k))
)
);
console.log(output);
如果您正在處理大型陣列,那么您應該考慮將查找陣列 ( filterArr) 轉換為Set。
const dataSample = [
{ staff: 1000, name: "Apple", logo_url: "biten apple", down: "yes" },
{ staff: 500, name: "Microsoft", logo: "squares", down: "no" },
{ staff: 4000, name: "Google", logo_url: "letter", down: "no" },
{ staff: 2000, name: "Coca Cola", logo: "letters", down: "yes" },
],
filterArr = ["name", "down"],
filterSet = new Set(filterArr),
output = dataSample.map((o) =>
Object.fromEntries(Object.entries(o).filter(([k, v]) => filterSet.has(k)))
);
console.log(output);
uj5u.com熱心網友回復:
這可以使用Array.map()結合Array.reduce() 來完成,如下所示:
const result = dataSample.map(o => filterArr.reduce((acc, curr) => {
acc[curr] = o[curr];
return acc;
}, {}));
請看一下下面的可運行代碼,看看它是如何作業的。
const dataSample = [{
"staff": 1000,
"name": "Apple",
"logo_url": "biten apple",
"down": "yes"
},
{
"staff": 500,
"name": "Microsoft",
"logo": "squares",
"down": "no"
},
{
"staff": 4000,
"name": "Google",
"logo_url": "letter",
"down": "no"
},
{
"staff": 2000,
"name": "Coca Cola",
"logo": "letters",
"down": "yes"
},
];
const filterArr = ["name", "down"];
const result = dataSample.map(o => filterArr.reduce((acc, curr) => {
acc[curr] = o[curr];
return acc;
}, {}));
console.log(result)
uj5u.com熱心網友回復:
試試這個:
const dataSample = [
{ staff: 1000, name: "Apple", logo_url: "biten apple", down: "yes" },
{ staff: 500, name: "Microsoft", logo: "squares", down: "no" },
{ staff: 4000, name: "Google", logo_url: "letter", down: "no" },
{ staff: 2000, name: "Coca Cola", logo: "letters", down: "yes" },
];
const filterArr = ["name", "down"];
let output = dataSample.map((cv) => Object.assign( ...filterArr.map(fa => ({[fa]: cv[fa]}))));
console.log(output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/472969.html
標籤:javascript 阵列过滤器
