问题描述
我有以下数组。第一个对象是原始数据。数组内部是更改后的值。我试图通过与内部数组的 Name 字段匹配来创建最终数据。应该看起来像
var a =
[
{"Id":"1","Test":"Name1","Name":"hunt9988ggggggggggggdfsf1111"},{"Id":"2","Test":"Name2","Name":"hunt9988ggggggggggggdfsf"},[
**{"Name":"hunt9988ggggggggggggdfsf1118","Id":"1"},// Changed value
{"Name":"hunt9988ggggggggggggdfsf1118","Id":"2"}**
]
]
最终数据
var a =
[
{"Id":"1","Name":"hunt9988ggggggggggggdfsf1118"},"Name":"hunt9988ggggggggggggdfsf1118"}
]
我正在尝试使用以下代码
var result = a.map(item => ({ value: item.Id,text: item.Name}));
console.log(result)
解决方法
喜欢吗?
注意我修改了原始数组
let a = [{
"Id": "1","Test": "Name1","Name": "hunt9988ggggggggggggdfsf1111"
},{
"Id": "2","Test": "Name2","Name": "hunt9988ggggggggggggdfsf"
},[{
"Name": "hunt9988ggggggggggggdfsf1118","Id": "1"
},// Changed value
{
"Name": "hunt9988ggggggggggggdfsf1118","Id": "2"
}
]
]
const replaceArray = a.find(item => Array.isArray(item))
replaceArray.forEach(item => a.find(aItem => aItem.Id === item.Id).Name=item.Name)
a = a.filter(item => item.Id)
console.log(a)
您可以按如下方式使用 .map
:
const a = [
{"Id":"1","Test":"Name1","Name":"hunt9988ggggggggggggdfsf1111"},{"Id":"2","Test":"Name2","Name":"hunt9988ggggggggggggdfsf"},[
{"Name":"hunt9988ggggggggggggdfsf1118","Id":"1"},{"Name":"hunt9988ggggggggggggdfsf1118","Id":"2"}
]
];
const _updateArrElements = (arr=[]) => {
// get items and updates values
const items = [...arr];
const updates = items.pop();
if(!(updates instanceof Array)) return arr;
// update items with the new values
return items.map(elem => {
const obj = updates.find(e => e.Id===elem.Id) || {};
return {...elem,...obj};
});
}
console.log( _updateArrElements(a) );