2017-04-20 5 views
1

Ich möchte Werte zum Array hinzufügen. Aber die gleichen Werte können sich aktualisieren. Zum Beispiel ist mein ArrayJavascript aktualisieren oder Werte zum Array hinzufügen

[{"abc1":"123456"},{"abc2":"123456"}] 

wenn ist wieder Hinzufügen ist abc1. Es kann aktualisiert werden. Zum Beispiel im Normalfall

[{"abc1":"123456"},{"abc2":"123456"},{"abc1":"123456"}] 

Aber ich möchte

[{"abc2":"123456"},{"abc1":"123456"}] 

Mein Code

var categories = [], 
arrIndex = {}; 

addOrReplace({"abc1":"125"}); 
addOrReplace({"abc2":"126"}); 
addOrReplace({"abc1":"127"}); 
addOrReplace({"abc3":"129"}); 


function addOrReplace(object) { 
    var index = arrIndex[object[0]]; 
    console.log("index:"+object[0]); 
    if(index === undefined) { 
     index = categories.length; 
    } 
    arrIndex[object[1]] = index; 
    categories[index] = object; 
} 

console.log(categories); 

Es ist nicht richtige Antwort zeigt. Es zeigt

[{"abc3":"129"}] 

I

wollen
[{"abc2":"126"},{"abc1":"127"},{"abc3":"129"}] 

Wie ist es möglich? Bitte hilf mir?

+1

Also wenn ich richtig verstehe, wenn Objekte mit dem Schlüssel 'abc1' existieren, löschen Sie es und drücken Sie den neuen Wert. Habe ich recht? – Rajesh

+2

Wenn Objekt in Array nur einen Schlüssel hat, würde ich vorschlagen, ein Objekt als Array zu haben. Wert wird in Objekt – Rayon

+0

@ Rajesh überschrieben werden ja du hast Recht. – joe

Antwort

2

Sie könnten Array#findIndex verwenden und das Objekt aus Kategorien durchsuchen, wenn der Index gefunden wird, und dann das neue Objekt auf categories schieben.

function addOrReplace(object) { 
 
    var key = Object.keys(object)[0], 
 
     index = categories.findIndex(o => key in o); 
 

 
    if (index !== -1) { 
 
     categories.splice(index, 1); 
 
    } 
 
    categories.push(object) 
 
} 
 

 
var categories = []; 
 

 
addOrReplace({ abc1: "125"}); 
 
console.log(categories); 
 
addOrReplace({ abc2: "126"}); 
 
console.log(categories); 
 
addOrReplace({ abc1: "127"}); 
 
console.log(categories); 
 
addOrReplace({ abc3: "129"}); 
 
console.log(categories);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1
var categories = new Map(); 

    addOrReplace({"abc1":"125"}); 
    addOrReplace({"abc2":"126"}); 
    addOrReplace({"abc1":"127"}); 
    addOrReplace({"abc3":"129"}); 


    function addOrReplace(object) { 
     for (var name in object) 
      categories[name] = object; 
    } 

    console.log(categories); 
0
var categories = [], 
arrIndex = {}; 

addOrReplace({"abc1":"125"}); 
addOrReplace({"abc2":"126"}); 
addOrReplace({"abc1":"127"}); 
addOrReplace({"abc3":"129"}); 


function addOrReplace(object) { 
    for(var c in categories){ 
     if(Object.keys(categories[c])[0] == Object.keys(object)[0]){ 
      categories.splice(c,1) 
     } 
    } 
    categories.push(object) 
} 

console.log(categories); 
//[{"abc2":"126"},{"abc1":"127"},{"abc3":"129"}] 
0

Ich weiß nicht, wie Sie schließlich die endgültigen Daten verwenden wäre aber falls Sie für die Einzigartigkeit suchen, würde Ich mag zu gehen, empfehlen für object hash anstelle von Array.

Zunächst:

{ 
    "abc1" : "123456", 
    "abc2" : "123456" 
} 

Wenn Sie jetzt { "abc1" : "some_other_value" } hinzufügen.

{ 
    "abc1" : "some_other_value", 
    "abc2" : "123456" 
} 

Sie können auch überprüfen, ob der Wert bereits vorhanden sind oder nicht if(objectHash('abc1')) verwenden.

Es kann Sie vor zusätzlichen Traversal speichern und überschreiben, wenn bereits vorhanden.

Verwandte Themen