1

For example: I have an array of objects like this:

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

Now I want to replace or overwrite the array above with the same array, but including different values (same keys, different values):

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

How can this be done in TypeScript?

Codehan25
  • 2,704
  • 10
  • 47
  • 94
  • Possible duplicate of [I want to replace all values with another array values , both arrays are in same size](https://stackoverflow.com/questions/30640771/i-want-to-replace-all-values-with-another-array-values-both-arrays-are-in-same) – ℛɑƒæĿᴿᴹᴿ Oct 23 '19 at 11:34
  • `Object.keys(arrayOfObjects).forEach(k => arrayOfObjects[k] = arrayOfObjects2[k])` – Amir Popovich Oct 23 '19 at 11:37

3 Answers3

1

Try this 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);

In 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));
Yahiya
  • 761
  • 4
  • 15
  • Is this also possible with the same array (without creating the arrray twoArray)? Because the values in the oneAray change here. – Codehan25 Oct 23 '19 at 11:35
  • @Codehan25 yes! `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)` but ensure that two variables with the same name are not declared . – Yahiya Oct 23 '19 at 11:41
1

Sure :)

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);

I wouldn't recommend this though: functional programming is awesome.

1

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)
Tolotra Raharison
  • 3,034
  • 1
  • 10
  • 15