我有一個簡單的陣列,我想更新這個陣列與價值order:"asc",并希望洗掉所有其他order鍵只有在type == "user"和key == "country"
const items = [
{
type: "user",
values: [
{order:"asc", key:"first_name"},
{key:"last_name"},
{key:"address"},
{key:"country"},
]
},
]
我的預期結果是
const items = [
{
type: "user",
values: [
{key:"first_name"},
{key:"last_name"},
{key:"address"},
{order:"asc", key:"country"},
]
},
]
我可以用mapinside做到這一點map。是否可以不回圈兩次?
items.map(
x => { if (x.type == "user") {
x.values = x.values.map(y => {
if (y.key.includes("country")) {
y.order = "asc"
} else if (JSON.stringify(x.values).includes("country")) {
delete y.order
}
return y
})
}
return [x]
});
uj5u.com熱心網友回復:
我認為你只能用雙回圈來做到這一點。我寫了這個腳本,但它與你的相似。
var newItems = items.map(el => {
if(el.type === "user"){
el.values = el.values.map(value => {
if(value.key === "country"){
value["order"] = "asc"
}else if(value["order"] != undefined){
delete value["order"]
}
return value
})
return el
}
})
uj5u.com熱心網友回復:
邏輯
- 回圈遍歷
items陣列。 - 查找節點
type"type" - 從該節點回圈遍歷
values陣列。 - 清除
"order"key 不存在的節點"country" - 添加
"order"為"asc"key 所在的位置"country"
作業小提琴
const items = [
{
type: "user",
values: [
{ order: "asc", key: "first_name" },
{ key: "last_name" },
{ key: "address" },
{ key: "country" },
]
},
];
items.filter(item => item.type === "user").forEach(item => {
item.values.filter(value => value.order === "asc").forEach(value => value.order && value.key !== "country" ? delete value.order : {});
item.values.filter(value => value.key === "country").forEach(value => value.order = "asc");
});
console.log(items);
uj5u.com熱心網友回復:
items.filter(itm => itm.type == "user")
.map(u => {u.values.map(v => {
delete v.order
if (u.values.key == "country")
u.values.order = "asc"
})
}
);
uj5u.com熱心網友回復:
如果你不想洗掉order:"asc",如果沒有country了在values陣列然后,而不是JSON.stringify(x.values).includes("country")在后,每一個物件values,你可以使用.find(),然后只回圈和洗掉,如果有與物件key:"country":
const items = [ { type: "user", values: [ {order:"asc", key:"first_name"}, {key:"last_name"}, {key:"address"}, {key:"country"}, ] }, ]
const result = items.map(obj => {
if (obj.type === 'user') {
const country = obj.values.find(o => o.key === 'country')
if (country) {
obj.values.forEach(value => delete value.order)
country.order = 'asc'
}
}
return obj
})
console.log(result)
.as-console-wrapper{min-height:100%}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388616.html
標籤:javascript 数组 json
