将 属性 的对象数组与另一个对象的键进行比较
Compare array of objects by property with key of another object
我要比较data.examples数组对象name.value属性value with wcObject.notCoveredList 键,如果键匹配,我想将 wcObject 的 all matched values 推送到一个数组,以便在 UI 中显示。如果密钥不匹配,我希望 name.desc 属性 数组对象的 data.examples 值通过 删除来推送 末尾的 未涵盖 文本。
data = {
examples : [
{
name: {
value:"someOne",
desc: "some random word not covered"
},
type: {
value:"General",
desc:"General"
}
}, {
name: {
value:"secondOne",
desc: "second on in the queue not covered"
},
type: {
value:"General",
desc:"General"
}
}, {
name: {
value:"thirdOne",
desc: "third one from the last not covered"
},
type: {
value:"General",
desc:"General"
}
}
]
}
wcObject = {
notCoveredList : [
{ someOne: "anyone can start " },
{ secondOne: "second One cannot start" },
{ thirdOne: "third One can be allowed" }
]
}
所以,这段代码:
- 建立一个过滤器对象。我们抓住所有的钥匙
wcObject.notCoveredList
,并使它们成为单个对象的键(使用
一个未定义的值),这样我们就可以用一个
当我们需要过滤时,调用 hasOwnProperty() 而不是遍历数组。
- 将
data.examples
数组的每个成员映射到它自己的 name.desc
属性 或 [剥离“未覆盖”] name.value
属性。
.
wcNotCoveredKeys = wcObject.notCoveredList.reduce((memo, item) => {
// value is empty for all, we only care about keys.
memo[Object.keys(item)[0]] = undefined;
return memo;
}, {})
// having built up our lookup table of those not covered, we continue:
forUI = data.examples.map(example => {
if (wcNotCoveredKeys.hasOwnProperty(example.name.value)) {
return example.name.value;
}
else {
notCoveredString = example.name.desc;
cutOutIndex = notCoveredString.indexOf(' not covered');
return notCoveredString.slice(0, cutOutIndex)
}
});
(已更新以集成字符串切片)
明确一点:如果您从 wcObject.notCoveredList 中删除第二个项目,那么您在 forUI 中获得的输出(给定您提供的示例数据 structures/values)将是
["someOne", "second on in the queue", "thirdOne"]
我要比较data.examples数组对象name.value属性value with wcObject.notCoveredList 键,如果键匹配,我想将 wcObject 的 all matched values 推送到一个数组,以便在 UI 中显示。如果密钥不匹配,我希望 name.desc 属性 数组对象的 data.examples 值通过 删除来推送 末尾的 未涵盖 文本。
data = {
examples : [
{
name: {
value:"someOne",
desc: "some random word not covered"
},
type: {
value:"General",
desc:"General"
}
}, {
name: {
value:"secondOne",
desc: "second on in the queue not covered"
},
type: {
value:"General",
desc:"General"
}
}, {
name: {
value:"thirdOne",
desc: "third one from the last not covered"
},
type: {
value:"General",
desc:"General"
}
}
]
}
wcObject = {
notCoveredList : [
{ someOne: "anyone can start " },
{ secondOne: "second One cannot start" },
{ thirdOne: "third One can be allowed" }
]
}
所以,这段代码:
- 建立一个过滤器对象。我们抓住所有的钥匙
wcObject.notCoveredList
,并使它们成为单个对象的键(使用 一个未定义的值),这样我们就可以用一个 当我们需要过滤时,调用 hasOwnProperty() 而不是遍历数组。 - 将
data.examples
数组的每个成员映射到它自己的name.desc
属性 或 [剥离“未覆盖”]name.value
属性。
.
wcNotCoveredKeys = wcObject.notCoveredList.reduce((memo, item) => {
// value is empty for all, we only care about keys.
memo[Object.keys(item)[0]] = undefined;
return memo;
}, {})
// having built up our lookup table of those not covered, we continue:
forUI = data.examples.map(example => {
if (wcNotCoveredKeys.hasOwnProperty(example.name.value)) {
return example.name.value;
}
else {
notCoveredString = example.name.desc;
cutOutIndex = notCoveredString.indexOf(' not covered');
return notCoveredString.slice(0, cutOutIndex)
}
});
(已更新以集成字符串切片)
明确一点:如果您从 wcObject.notCoveredList 中删除第二个项目,那么您在 forUI 中获得的输出(给定您提供的示例数据 structures/values)将是
["someOne", "second on in the queue", "thirdOne"]