首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换数组对象中的两个属性值并创建新数组

替换数组对象中的两个属性值并创建新数组
EN

Stack Overflow用户
提问于 2020-05-07 23:48:02
回答 3查看 32关注 0票数 0

*编辑我应该得到一个更清晰的问题,并提供更好的数据。

我需要获取一个现有的对象数组,替换依赖于两个不同id的名称,并用它们创建一个新的数组。

我的JSON:

代码语言:javascript
复制
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衍生品的名称更改为下面的名称,但是,请保持其余名称不变。

代码语言:javascript
复制
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时,以下内容才会更改。

代码语言:javascript
复制
const newArr = legendData.map(item => item.assetManagerId === 11 && item.fileTypeId === 1? {
            ...item, name: "AIM Derivatives ODIN"
            } : item)

console.log(newArr)       
EN

回答 3

Stack Overflow用户

发布于 2020-05-07 23:51:55

您可以使用map。在进行映射时,您可以通过fileTypeId从包含所需名称的对象中获取所需名称:

代码语言:javascript
复制
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)

更新:

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2020-05-07 23:53:13

您可以创建字典并存储fileTypeId和相关文本

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2020-05-07 23:59:54

您可以尝试使用json配置,键是assetManagerIdfileTypeId,值是新名称。

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61662061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档