【问题标题】:How to replace an array of objects with an array including newer objects in TypeScript?如何用包含 TypeScript 中较新对象的数组替换对象数组?
【发布时间】:2019-10-23 11:30:14
【问题描述】:

例如:我有一个这样的对象数组:

let arrayOfObjects: [
    { "id": 0, "name": "Available" },
    { "id": 1, "name": "Ready" },
    { "id": 2, "name": "Started" }
];

现在我想用相同的数组替换或覆盖上面的数组,但包含不同的值(相同的键,不同的值):

let arrayOfObjects: [
    { "id": 0, "name": "Not Available" },
    { "id": 1, "name": "Not Ready" },
    { "id": 2, "name": "Not Started" }
];

如何在 TypeScript 中做到这一点?

【问题讨论】:

标签: javascript arrays typescript data-structures higher-order-functions


【解决方案1】:

试试这个 JS

let oneArray = [
    { "id": 0, "name": "Available" },
    { "id": 1, "name": "Ready" },
    { "id": 2, "name": "Started" }
];
let twoArray = [
    { "id": 0, "name": "Not Available" },
    { "id": 1, "name": "Not Ready" },
    { "id": 2, "name": "Not Started" }
];

let newArray = Object.assign([], oneArray, twoArray);
console.log(newArray);

在 TS 中

interface Data {
  oneArray: array;
  twoArray: array;
}

function merge(data: Data) {
  return Object.assign([], data.oneArray, data.twoArray);
}

let user = {
    oneArray: [
      { "id": 0, "name": "Available" },
      { "id": 1, "name": "Ready" },
      { "id": 2, "name": "Started" }
    ],
    twoArray:  [
      { "id": 0, "name": "Not Available" },
      { "id": 1, "name": "Not Ready" },
      { "id": 2, "name": "Not Started" }
  ]
};

console.log(merge(user));

【讨论】:

  • 这是否也可以使用相同的数组(不创建数组 twoArray)?因为 oneAray 中的值在这里发生了变化。
  • @Codehan25 是的! let oneArray = [ { "id": 0, "name": "Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Started" } ]; let newArray = Object.assign({}, oneArray, [ { "id": 0, "name": "Not Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Not Started" } ]); console.log(newArray) 但确保没有声明两个同名变量。
【解决方案2】:

当然:)

let arrayOfObjects = [
    { "id": 0, "name": "Available" },
    { "id": 1, "name": "Ready" },
    { "id": 2, "name": "Started" }
];

const newValues = ['Not Available', 'Not Ready', 'Not Started'];


newValues.forEach((value, i) => {
  arrayOfObjects.find(o => o.id === i).name = value;
});

console.log(arrayOfObjects);

不过我不推荐这个:functional programming is awesome

【讨论】:

    【解决方案3】:

    let arrayOfObjects = [
      { "id": 0, "name": "Available" },
      { "id": 1, "name": "Ready" },
      { "id": 2, "name": "Started" }
    ];
    
    let names = ['Not Available', 'Not Ready', 'Not Started']
    let result = arrayOfObjects.map((user, index) => ({ ...user, name: names[index] }))
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2017-09-11
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2019-05-20
      • 2020-11-15
      相关资源
      最近更新 更多