如何通过 id 将对象与 jquery 合并
Posted
技术标签:
【中文标题】如何通过 id 将对象与 jquery 合并【英文标题】:How to merge object with jquery by id 【发布时间】:2021-09-26 08:45:33 【问题描述】:我需要能够连接两个 javascript 对象,如下所示:
let arr1 = [
"0": id: "abdc4051", date: "2017-01-24" ,
"1": id: "abdc4052", date: "2017-01-22"
];
let arr2 = [
"0": category: "Sport", data: code: "abdc4051", name: "ab" ,
"1": category: "Others", data: code: "abdc4052", name: "abc"
];
有没有人有这方面的脚本或知道这样做的内置方法? 我希望将日期添加到 arr2 上的数据中,条件代码等于 id
【问题讨论】:
欢迎来到 SO!你试过什么?你在哪里失败了? 你能在这里告诉你你在期待什么吗?您的预期输出是什么? 为什么你的对象有顺序的初始属性?"0": ..., "1": ...
【参考方案1】:
您的对象形状使这比应有的更难。您确定要每个对象中的顺序属性,还是记录/不良解析的产物?
如果你真的需要它们,你需要解决它们,在下面的 sn-p 中使用 Object.values()
从 arr1
创建一个 Map
,并在最后的 map()
调用中使用 Object.entries()
在arr2
上存储顺序键,然后在合并逻辑后的返回中重新引入。
const
arr1 = [ "0": id: "abdc4051", date: "2017-01-24" , "1": id: "abdc4052", date: "2017-01-22" ],
arr2 = [ "0": category: "Sport", data: code: "abdc4051", name: "ab" , "1": category: "Others", data: code: "abdc4052", name: "abc" ],
// create map of dates: Map(2) 'abdc4051' => '2017-01-24', 'abdc4052' => '2017-01-22'
dateMap = new Map(arr1.map(o =>
const [ id, date ] = Object.values(o);
return [id, date];
)),
// map over arr2, get date from Map and add it to 'data' if it exists
result = arr2.map(o =>
const [[k, _o]] = Object.entries(o);
const date = dateMap.get(_o.data.code);
return
[k]:
..._o,
data: ..._o.data, ...(date ? date : )
;
);
console.log(result);
.as-console-wrapper max-height: 100% !important; top: 0;
如果您不需要初始顺序键,则合并变得不那么冗长。
const
arr1 = [ id: "abdc4051", date: "2017-01-24" , id: "abdc4052", date: "2017-01-22" ],
arr2 = [ category: "Sport", data: code: "abdc4051", name: "ab" , category: "Others", data: code: "abdc4052", name: "abc" ],
dateMap = new Map(arr1.map(o => [o.id, o.date])),
result = arr2.map(o => (
...o,
data: ...o.data, ...(dateMap.has(o.data.code) ? date: dateMap.get(o.data.code) : )
));
console.log(result)
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
以上是关于如何通过 id 将对象与 jquery 合并的主要内容,如果未能解决你的问题,请参考以下文章