JS-Map-Rückgabeobjekt

Lesezeit: 4 Minuten

Benutzer-Avatar
Manuel Betancurt

Ich habe dieses Array,

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

Was muss ich tun, um ein zugeordnetes Array zurückzugeben, das jeweils 10 hinzufügt

startet

Wert, hier mein erster Ansatz,

var launchOptimistic = rockets.map(function(elem){
  // return  elem.launches+10;
     return (elem.country, elem.launches+10);


});
console.log(launchOptimistic);

  • Möchten Sie die ursprünglichen Objekte ändern? Oder möchten Sie neue Objekte (Kopien) erstellen?

    – Ibrahim Mahrir

    16. Dezember 2017 um 2:07 Uhr

  • return array similar kann neu sein

    – Manuel Betancurt

    16. Dezember 2017 um 2:08 Uhr

Benutzer-Avatar
Hämadri Dasari

Verwenden Sie .map ohne Rückgabe auf einfache Weise. Beginnen Sie auch damit, let und const anstelle von var zu verwenden, da let und const besser zu empfehlen sind

const rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

const launchOptimistic = rockets.map(elem => (
  {
    country: elem.country,
    launches: elem.launches+10
  } 
));

console.log(launchOptimistic);

  • Nur eine Frage: Warum sind runde Klammern um das zurückgegebene Objekt notwendig? Warum kann dieses Lambda das Objekt nicht einfach so zurückgeben: const launchOptimistic = rockets.map(elem => { country: elem.country, launches: elem.launches+10 } ); ?

    – Iorweth333

    17. Dezember 2020 um 21:48 Uhr

  • Gerundete Klammern werden verwendet, um mehrzeilige Anweisungen zurückzugeben.

    – Rahil Wazir

    2. Januar 2021 um 21:47 Uhr

  • @ Iorweth333 weil die Syntax () => {} verwendet geschweifte Klammern, um einen Funktionsrumpf zu deklarieren, also würde es, anstatt ein Objekt zurückzugeben, tatsächlich versuchen, den Inhalt der geschweiften Klammern als Funktion auszuwerten, und Syntaxfehler ausgeben.

    – Ryan

    21. April 2021 um 23:24 Uhr

Sie sind schon sehr nah dran, Sie müssen nur das neue gewünschte Objekt zurückgeben. In diesem Fall dasselbe, außer dass der Startwert um 10 erhöht wurde:

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

var launchOptimistic = rockets.map(function(elem) {
  return {
    country: elem.country,
    launches: elem.launches+10,
  } 
});

console.log(launchOptimistic);

Benutzer-Avatar
Ibrahim Mahrir

Wenn Sie die ursprünglichen Objekte ändern möchten, dann ein einfaches Array#forEach Wird besorgt:

rockets.forEach(function(rocket) {
    rocket.launches += 10;
});

Wenn Sie die ursprünglichen Objekte unverändert lassen möchten, verwenden Sie Array#map und kopieren Sie die Objekte mit Object#assign:

var newRockets = rockets.map(function(rocket) {
    var newRocket = Object.assign({}, rocket);
    newRocket.launches += 10;
    return newRocket;
});

  • Du wolltest benutzen map im zweiten Beispiel stattdessen die forEach?

    – T30

    15. März 2021 um 0:09 Uhr

Benutzer-Avatar
Emre

Die sauberste Lösung ist die Destrukturierung.

const rockets = [
        { country:'Russia', launches:32 },
        { country:'US', launches:23 },
        { country:'China', launches:16 },
        { country:'Europe(ESA)', launches:7 },
        { country:'India', launche`enter code here`s:4 },
        { country:'Japan', launches:3 }
    ];
    const updated = rockets.map(rocket=>{
    return {...rocket,launches:rocket.launches+10}
    });

Benutzer-Avatar
Nir Alfasi

map Raketen und fügen 10 zu seinen Starts hinzu:

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];
rockets.map((itm) => {
    itm.launches += 10
    return itm
})
console.log(rockets)

Wenn Sie nicht ändern möchten rockets du kannst tun:

var plusTen = []
rockets.forEach((itm) => {
    plusTen.push({'country': itm.country, 'launches': itm.launches + 10})
})

  • Ich möchte darauf hinweisen, dass dadurch die Elemente im ursprünglichen Array mutiert werden.

    – CRice

    16. Dezember 2017 um 2:07 Uhr

  • @CRice true, eine weitere Option, die das ursprüngliche Array nicht verändert, wurde hinzugefügt

    – Nir Alfasi

    4. April 2021 um 13:44 Uhr

Benutzer-Avatar
nein segev

In Anbetracht der Tatsache, dass Objekte viele Eigenschaften haben können, wäre es besser, den Inhalt des Objekts zu verteilen und bestimmte Eigenschaften neu zuzuweisen, um einen prägnanteren Code zu erhalten.

const rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

const launchOptimistic = rockets.map(function(elem) {
  return {
    ...elem,
    launches: elem.launches+10,
  } 
});

console.log(launchOptimistic);

  • Ich möchte darauf hinweisen, dass dadurch die Elemente im ursprünglichen Array mutiert werden.

    – CRice

    16. Dezember 2017 um 2:07 Uhr

  • @CRice true, eine weitere Option, die das ursprüngliche Array nicht verändert, wurde hinzugefügt

    – Nir Alfasi

    4. April 2021 um 13:44 Uhr

Lösung (Ein Liner) mit einem frischen Beispiel

Angenommen, die Kunden Ihrer Bank (einschließlich Ihnen natürlich) haben einen Bonus erhalten.

let finance = [
    {funds:10050, client_id: 1020},
    {funds:25000, client_id: 77},
    {funds:90000, client_id: 442}
];

finance = finance.map(({funds, client_id}) => {funds = funds + 2000; return {funds, client_id}});

↑ Testen und unverändert nach Chrome/Firefox/Edge kopieren DevTools Konsole ↑

Diese Technik genannt Destrukturierende Aufgabe

Die destrukturierende Zuweisungssyntax ist ein JavaScript-Ausdruck, der es ermöglicht, Werte aus Arrays oder Eigenschaften von Objekten in verschiedene Variablen zu entpacken.

1176210cookie-checkJS-Map-Rückgabeobjekt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy