gpt4 book ai didi

javascript - 是否有 ES6 快捷方式来比较元素数组和对象键并删除不匹配的元素?

转载 作者:行者123 更新时间:2023-12-01 22:52:22 25 4
gpt4 key购买 nike

我正在尝试找到可以激活以下内容的快捷方式或单行代码:

我有一个数组 selectedFields 由以下元素组成:

selectedFields = [ "time", "age", "city" ]

我有一个对象 valueProvided 由以下值组成:

valueProvided = { "time": "2022-10-01", "visa": "onArrival", "age": 30, "city": "paris", "hotel": "Holiday" }

我想比较这 2 个字段并从 valueProvided object 中删除数组中不可用的任何元素。这意味着在这种情况下,元素 visahotel 不在 selectedFields 中,所以我想将其从 valueProvided 中删除> 所以我的最终结果应该是这样的:

result = { "time": "2022-10-01",  "age": 30, "city": "paris" }

我知道我可以遍历数组中的元素并从对象中删除不匹配的键来实现这一点,但我试图找到是否有任何快捷方式或 ES6 方式在一个单一的行或高效。

我找到了几个答案,但在所有情况下,他们都试图将对象与另一个对象或数组与另一个数组进行比较,而不是将数组与对象进行比较的交叉方法,反之亦然。

最佳答案

您可以使用 Object.entriesvalueProvided 中获取条目,filter他们判断键是否在 selectedFields 中,然后使用 Object.fromEntries构建结果对象:

const selectedFields = ["time", "age", "city"]

const valueProvided = {
"time": "2022-10-01",
"visa": "onArrival",
"age": 30,
"city": "paris",
"hotel": "Holiday"
}

const result = Object.fromEntries(
Object.entries(valueProvided).filter(([k, v]) => selectedFields.includes(k))
)

console.log(result)

正如@NickParsons 在评论中指出的那样,您可以通过从mapping selectedFields 中的键到 valueProvided 中的键值对:

const selectedFields = ["time", "age", "city"]

const valueProvided = {
"time": "2022-10-01",
"visa": "onArrival",
"age": 30,
"city": "paris",
"hotel": "Holiday"
}

const result = Object.fromEntries(
selectedFields.map(k => [k, valueProvided[k]])
)

console.log(result)

如果 valueProvided 是一个数组,您需要使用 map 对其进行迭代:

const selectedFields = ["time", "age", "city"]

const valueProvided = [{
"time": "2022-10-01",
"visa": "onArrival",
"age": 30,
"city": "paris",
"hotel": "Holiday"
},
{
"time": "2022-11-12",
"visa": "preBooked",
"age": 45,
"city": "london",
"hotel": "Business"
}
]

const result = valueProvided.map(v => Object.fromEntries(
Object.entries(v).filter(([k, v]) => selectedFields.includes(k))
// or
// selectedFields.map(k => [k, v[k]])
))

console.log(result)

关于javascript - 是否有 ES6 快捷方式来比较元素数组和对象键并删除不匹配的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74068692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com