J'ai essayé de trouver une réponse, mais sans succès.

L'échantillon de données json, disons qu'il serait nommé mainArray :

[{
  "id": 4455,
  "key1": 44,
  "key2": 55
},
{
  "id": 1122,
  "key1": 11,
  "key2": 22
}]

L'échantillon de données nestedArray doit être ajouté dans mainArray :

[{
  "nestedkey0": 'Value0',
  "nestedkey1": "Value1",
  "nestedkey2": "Value2"
},
{
  "nestedkey0": "Value3",
  "nestedkey1": "Value4",
  "nestedkey2": "Value5"
}]

Et nous devons vérifier si la clé "id" (dans mainArray ) est égale à la variable "specificId":

 var specificId = 4455;

Dans le cas où ils sont égaux - nous devons ajouter nestedArray dans l'objet de mainArray en tant que nouvelle clé avec la liste des objets, donc le résultat renvoyé devrait être comme ceci:

[{
  "id": 4455,
  "newKey": [{
      "nestedkey0": 'Value0',
      "nestedkey1": "Value1",
      "nestedkey2": "Value2"
    },
    {
      "nestedkey0": "Value3",
      "nestedkey1": "Value4",
      "nestedkey2": "Value5"
    }];
  "key1": 44,
  "key2": 55
},
{
  "id": 1122,
  "key1": 11,
  "key2": 22
}];

Voici un exemple de code sur Plunker: https://plnkr.co/edit/YJ3lTbleKrBJBaJm7VwU?p=preview

J'ai le sentiment que cela ne devrait pas être difficile, mais je ne suis pas très expérimenté en angularjs pour résoudre cette tâche. Merci d'avance pour vos réponses!

Mettre à jour

Code mis à jour dans Plunker avec la réponse de Nina Scholz (lien ci-dessus)

Et une autre solution de Halcyon

http://jsbin.com/xaxagusuma/edit?html,js,console,output

Merci a tous pour votre aide!

3
Vlad 8 mars 2016 à 17:16

4 réponses

Meilleure réponse

En clair Javascript, vous pouvez utiliser {{X0} } pour l'itération, en raison d'un éventuel court-circuit.

La méthode some() teste si un élément du tableau réussit le test implémenté par la fonction fournie.

var mainArray = [{ "id": 4455, "key1": 44, "key2": 55 }, { "id": 1122, "key1": 11, "key2": 22 }],
    nastedArray = [{ "nastedkey0": 'Value0', "nastedkey1": "Value1", "nastedkey2": "Value2" }, { "nastedkey0": "Value3", "nastedkey1": "Value4", "nastedkey2": "Value5" }],
    specificId = 4455;

mainArray.some(function (a) {
    if (a.id === specificId) {
        a.newKey = nastedArray;
        return true;
    }
});

document.write('<pre>' + JSON.stringify(mainArray, 0, 4) + '</pre>');
3
Nina Scholz 8 mars 2016 à 14:27

Comme vous pensez que ce n'est pas très difficile. La partie la plus difficile est de trouver l'objet correct pour insérer le nastedArray .

var mainArray = [/**/];
var nastedArray = [/***/];
var index = null;
var specificId = 4455;
for (var i = 0; index === null, i < mainArray.length; i += 1) {
    if (mainArray[i].id === specificId) {
        index = i;
    }
}
if (index !== null) {
    mainArray[index].newKey = nastedArray;
}
1
Halcyon 8 mars 2016 à 15:34

Une alternative avec Array.prototype.find

La méthode find () renvoie une valeur dans le tableau, si un élément du tableau satisfait la fonction de test fournie. Sinon, undefined est retourné.

(consultez la table de compatibilité!)

var mainArray = [{ "id": 4455, "key1": 44, "key2": 55 }, { "id": 1122, "key1": 11, "key2": 22 }],
    nastedArray = [{ "nastedkey0": 'Value0', "nastedkey1": "Value1", "nastedkey2": "Value2" }, { "nastedkey0": "Value3", "nastedkey1": "Value4", "nastedkey2": "Value5" }],
    specificId = 4455;


var item = mainArray.find(x => x.id === specificId);
if (item !== undefined) {
  item.newKey = nastedArray;
}

console.log(JSON.stringify(mainArray));
1
Andreas 8 mars 2016 à 14:38

Et si c'était simple :)

    for (var i = 0, i < mainArray.length; i++) {
        if (mainArray[i].id === specificId) {
            mainArray[i].newKey = nestedArray;
            break;
        }
    }

Fonctionne dans tous les navigateurs.

1
panghal0 8 mars 2016 à 15:53