*编辑我应该得到一个更清晰的问题,并提供更好的数据。
我需要获取一个现有的对象数组,替换依赖于两个不同id的名称,并用它们创建一个新的数组。
我的JSON:
const legendData = [{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 1,
{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 2,
},
{
"assetManagerId": 8,
"name": "Barings",
"fileTypeId": 2,
},
{
"assetManagerId": 5,
"name": "BlackRock",
"fileTypeId": 1,
}]我需要将AIM衍生品的名称更改为下面的名称,但是,请保持其余名称不变。
const = legendData[{
"assetManagerId": 11,
"name": "AIM Derivatives ODIN",
"fileTypeId": 1,
{
"assetManagerId": 11,
"name": "AIM Derivatives CMF",
"fileTypeId": 2,
},
{
"assetManagerId": 8,
"name": "Barings",
"fileTypeId": 2,
},
{
"assetManagerId": 5,
"name": "BlackRock",
"fileTypeId": 1,
}]我在下面的代码中完成了一半,然而,我不知道如何将两者结合起来。仅当fileTypeId为1而不是2时,以下内容才会更改。
const newArr = legendData.map(item => item.assetManagerId === 11 && item.fileTypeId === 1? {
...item, name: "AIM Derivatives ODIN"
} : item)
console.log(newArr) 发布于 2020-05-07 23:51:55
您可以使用map。在进行映射时,您可以通过fileTypeId从包含所需名称的对象中获取所需名称:
let arr = [{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 1,
},
{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 2,
}]
const names = {1: 'AIM Derivatives ODIN', 2:'AIM Derivatives CMF'}
const result = arr.map(({name, fileTypeId, ...rest}) =>
({name: names[fileTypeId], fileTypeId, ...rest}))
console.log(result)
更新:
let arr = [{ "assetManagerId": 11, "name": "AIM Derivatives", "fileTypeId": 1},{
"assetManagerId": 11, "name": "AIM Derivatives", "fileTypeId": 2,
},
{
"assetManagerId": 8, "name": "Barings", "fileTypeId": 2,
},
{
"assetManagerId": 5, "name": "BlackRock", "fileTypeId": 1,
}]
const names = {'AIM Derivatives': { 1: 'AIM Derivatives ODIN', 2:'AIM Derivatives CMF'}}
const result = arr.map(({name, fileTypeId, ...rest}) =>
({
name: names[name] ? names[name][fileTypeId] : name,
fileTypeId,
...rest
}))
console.log(result)
发布于 2020-05-07 23:53:13
您可以创建字典并存储fileTypeId和相关文本
const legendData = [{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 1,
},
{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 2,
}
]
const idMap = {
1: "AIM Derivatives ODIN",
2: "AIM Derivatives CMF"
}
// check if the assetManagerId matches and if the `fileTypeId` is one of the key in dictionary
const newArr = legendData.map(item => item.assetManagerId === 11 && idMap[item.fileTypeId] ? {
...item,
// if one of the key the get the relevant value of that key
name: idMap[item.fileTypeId]
} : item)
console.log(newArr)
发布于 2020-05-07 23:59:54
您可以尝试使用json配置,键是assetManagerId和fileTypeId,值是新名称。
const newNamesConfig = {
11: {
1: { name: 'AIM Derivatives ODIN' },
2: { name: 'AIM Derivatives CMF' },
},
}
const derivatesNames = [{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 1,
},
{
"assetManagerId": 11,
"name": "AIM Derivatives",
"fileTypeId": 2,
}];
const renamedArray = derivatesNames.map(derivate => Object.assign({}, derivate,newNamesConfig[derivate.assetManagerId][derivate.fileTypeId]));
console.log(renamedArray)
https://stackoverflow.com/questions/61662061
复制相似问题