【发布时间】:2021-05-07 15:05:11
【问题描述】:
我正在使用下面的代码有条件地向数组添加元素: 当 arr1 中的 domain 没有该域的 arr2 中的 kwd 时,添加键:域、键、位置:“n/a”、日期、引擎和设备。
var arr1 = ["xxx", "yyy"];
var arr2 = [
{ domain: "xxx", kwd: "a", position: 1, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"},
{ domain: "yyy", kwd: "a", position: 2, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"},
{ domain: "xxx", kwd: "b", position: 1, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"},
{ domain: "yyy", kwd: "b", position: 2, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"},
{ domain: "yyy", kwd: "c", position: 2, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"},
{ domain: "xxx", kwd: "d", position: 1, date: "2021-05-07T08:05:16.806Z", engine: "google", device: "desktop"}
];
const grouped = arr2.reduce((group, entry) => {
const lookup = group[entry.kwd] || {};
return {
...group,
[entry.kwd]: {
...lookup,
[entry.domain]: entry
}
};
}, {});
const filledIn = Object.entries(grouped).reduce(
(arr, [key, group]) => [
...arr,
...arr1.map((domain) =>
domain in group
? group[domain]
: {
domain,
kwd: key,
position: "n/a",
date: grouped.date,
engine: grouped.engine,
device:grouped.device,
}
)
],
[]
);
console.log(filledIn);
脚本运行良好,但返回未定义的日期、引擎和设备。
...
{
date: undefined,
device: undefined,
domain: "yyy",
engine: undefined,
kwd: "d",
position: "n/a"
}]
我该如何解决这个问题?
谢谢
【问题讨论】:
-
运行你的 jsfiddle 表明只有一些条目没有日期和引擎。你试过调试你的代码吗?
-
当您为 kwd:c 和 domain:xxx 定义 arr2 时,您缺少 kwd:d 和 domain:yyy 的对象
-
您的目标是返回“n/a”而不是
undefined?
标签: javascript jquery arrays