Ich habe eine Reihe von Objekten wie folgt:

channels=[
  {name: mega, status: true},
  {name: ant, status: false},
  {name: apl, status: true}
]

Und ich habe ein einzelnes Objekt mit diesem Format

obj = {0: false, 1: true}

Die Schlüssel im einfachen Objekt repräsentieren Indizes des Arrays channels. Die Eigenschaften status müssen aktualisiert werden.

Für das obige Beispiel sollten die Daten channels aktualisiert werden auf:

channels=[
  {name: mega, status: false},
  {name: ant, status: true},
  {name: apl, status: true}
]

Wie kann ich das effizient umsetzen?

2
Alex_R 18 Jän. 2019 im 15:56

4 Antworten

Beste Antwort

Sie können das obj mit einer beliebigen Methode durchlaufen (hier habe ich Object.keys , um ein Array von Schlüsseln vom obj -Objekt und forEach , um sie zu durchlaufen) und aktualisieren Sie das Feld. Dies kann in einer Codezeile erreicht werden:

const channels = [
  {name: "mega", status: true},
  {name: "ant", status: false},
  {name: "apl", status: true}
];

const obj = {
  "0": false,
  "1": true
};

Object.keys(obj).forEach((item, i) => channels[i].status = obj[i]);

/**
 * If "channels" array is NOT ALWAYS longer than the amount of "obj" properties,
 * you should add the check for existence, the simpliest one is implemented below:
 * 
 * Object.keys(obj).forEach((item, i) => channels[i] ? channels[i].status = obj[i] : null);
 */
console.log(channels);

In dem bereitgestellten Fall ist das ursprüngliche Array mutiert. Wenn es nicht das ist, was Sie benötigen, empfehle ich, einen Blick auf map Methode mutiert nicht das ursprüngliche Array, sondern erstellt stattdessen ein neues.

0
Commercial Suicide 18 Jän. 2019 im 16:13

Sie können das channels Array mit forEach() durchlaufen und mit Object.assign() die Eigenschaft überschreiben.

let channels = [
  {name: 'mega', status: true },
  {name: 'ant' , status: false},
  {name: 'apl' , status: true }
];

let obj = {
  0: false,
  1: true
};

channels.forEach((o, i) => i in obj ? Object.assign(o, {status: obj[i]}) : o);

console.log(channels);
.as-console-wrapper { max-height: 100% !important; top: 0; }
-1
Mohammad Usman 18 Jän. 2019 im 17:41

Eine einfache for-Schleife reicht aus:

for (let index in obj) channels[index].status = obj[index];
const channels=[{name: "mega", status: true}, {name: "ant", status: false}, {name: "apl", status: true}];

const obj={0: false, 1:true};

for (let index in obj) {
	channels[index].status = obj[index];
}

console.log(channels);

Wenn Sie das ursprüngliche Array nicht mutieren möchten, aber ein neues Array mit den Änderungen möchten, dann:

const channels=[{name: "mega", status: true}, {name: "ant", status: false}, {name: "apl", status: true}];

const obj={0: false, 1:true};

const result = channels.map(({name, status}, i) => 
    ({name, status: i in obj ? obj[i] : status})
);

console.log(result);
1
trincot 18 Jän. 2019 im 13:07

Diese Schleife sollte es tun.

 for(var key in obj){
       channels[key].status = obj[key]
    }
0
Abdul Aleem 18 Jän. 2019 im 13:04