Javascript/NodeJS-映射两个嵌套数组,如果有则输出结果,如果没有则输出NULL



我得到两个嵌套数组,如下所示:

let actual = [["123", "short_text"], ["456", "short_text"], ["789", "varchar"], ["101", "long_text"], ["112", "short_text"]];
let values = [["789", "blabla"], ["456", "lala"]];

Actual—数据库[ref_id, field_type]中的潜在字段。实际是测试的正确结构-始终如此。

Values-具有来自测试结果[ref_id, test_answer]的值的源

我想将值ref_id与实际ref_id匹配,如果有的话输出答案并打印"ref_id";NULL";如果没有给出答案。

预期结果:

let controlledArray = [
{id: "123", val: "NULL"},
{id: "456", val: "lala"},
{id: "789", val: "blabla"},
{id: "101", val: "NULL"},
{id: "112", val: "NULL"},
];

尝试过这个(不起作用(:

let actual = [["456", "short_text"], ["789", "varchar"], ["101", "long_text"], ["112", "short_text"]];
let values = [["789", "blabla"], ["456", "lala"]];  
let map = {};
actual.forEach(i => map[i] = "NULL");
values.forEach(i => map[i] === "NULL" && (map[i] = i));
let controlledArray = Object.keys(map).map(k => ({ id: k, val: map[k] }));
console.log(controlledArray)

我想这很简单,但我刚刚陷入了困境——感谢的帮助

Object.fromEntriesmap一起使用并破坏分配

let actual = [
["123", "short_text"],
["456", "short_text"],
["789", "varchar"],
["101", "long_text"],
["112", "short_text"]
];
let values = [
["789", "blabla"],
["456", "lala"]
];
let obj = Object.fromEntries(values); //{456: 'lala', 789: 'blabla'}
let result = actual.map(arrs => arrs[0]) //  ['123', '456', '789', '101', '112']
.map(id => ({
id,
val: obj[id] ?? 'NULL'
}))
console.log(result);

注意 运算符??是零合并运算符意味着如果值为nullundefined返回其右侧值,在我们的情况下为'NULL'

我也会创建一个临时映射对象,但它是由引用键控的,并且具有相应的值,该值的目标结构为";NULL";。然后迭代第二个数组;NULL";实际值。最后从临时映射对象中提取值:

const actual = [["123", "short_text"], ["456", "short_text"], ["789", "varchar"], ["101", "long_text"], ["112", "short_text"]];
const values = [["789", "blabla"], ["456", "lala"]];
const map = Object.fromEntries(actual.map(([id]) => [id, {id, val: "NULL"}]));
values.forEach(([id, val]) => map[id].val = val);
const controlledArray = Object.values(map);
console.log(controlledArray);

let actual = [["123", "short_text"], ["456", "short_text"], ["789", "varchar"], ["101", "long_text"], ["112", "short_text"]];
let values = [["789", "blabla"], ["456", "lala"]];
const valuesMap = {}
values.forEach(([k, v]) => (valuesMap[k] = v))
const controlledArray = actual.map(([k, v]) => ({ [k]: valuesMap[k] || 'NULL' }))

您可以从值数组创建一个对象进行查找。然后从对象或集合"中查找标识符;NULL";如果不存在,则默认为。

let actual = [["123", "short_text"], ["456", "short_text"], ["789", "varchar"], ["101", "long_text"], ["112", "short_text"]];
let values = [["789", "blabla"], ["456", "lala"]];

const map = Object.fromEntries(values);
const controlledArray = actual.map(
([id, val]) => ({id, val: map[id] || "NULL"})
);
console.log(controlledArray);

相关内容

最新更新