0
votes

Mettre à jour la valeur d'objet à l'aide de JavaScript

J'aimerais savoir comment mettre à jour une matrice de liste d'objets à l'aide de JavaScript.

Comment mettre à jour le objlist avec le newobjlist en correspondant au ID et nom . Si le ID et nom correspond à la mise à jour de l'objet objlist objet imbriqué. xxx

Sortie attendue: xxx


1 commentaires

4 Réponses :


-1
votes

Itérate à la fois par les tableaux et modifier si correspond à votre condition.

update : voir comment les objets imbriqués (une profondeur de niveau dans votre échantillon) sont itérés. xxx

Observez comment les objets de tableau d'origine sont référencé directement.


0 commentaires

0
votes

Vous pouvez faire ce qui suit;

var newObjList = [{
  "id": "service",
  "name": "bank",
  "amount": 2000
}, {
  "id": "service",
  "name": "credit",
  "amount": 5000
}];

var objList = [{
  "btob": [{
    "id": "service",
    "name": "bank",
    "amount": 1000
  }, {
    "id": "fund",
    "name": "bank",
    "amount": 2000
  }, {
    "id": "others",
    "name": "bank",
    "amount": 5000
  }]
}, {
  "ctob": [{
    "id": "service",
    "name": "credit",
    "amount": 1000,
    "rate": 0.4
  }, {
    "id": "fund",
    "name": "credit",
    "amount": 3000,
    "rate": 0.2
  }, {
    "id": "others",
    "name": "credit",
    "amount": 4000,
    "rate": 0.6
  }]
}];

var flatList = objList.flatMap(obj => obj["btob"] || obj["ctob"]);
newObjList.forEach(newObj => flatList
  .filter(obj => obj.id == newObj.id && obj.name == newObj.name)
  .forEach(obj => Object.keys(newObj).forEach(key => obj[key] = newObj[key])));

console.log(objList);


2 commentaires

Merci d'aide, mais souhaitez renvoyer l'OBJ sans clés de codage ( obj.amount )


@Senthil Vérifiez à nouveau, j'ai mis à jour la logique afin que les valeurs de clé ne soient pas correctes. Mais il insérera de nouveaux champs à partir de newobj , par exemple, peut insérer un "taux": 0.4 à un obj dans objlist qui n'avait pas de tel Champ, est-ce que vous voulez un comportement correct?



0
votes

Le code ci-dessous générerait l'objet requis de manière dynamique sans aucun exclusion de code papier sur les touches ou les valeurs. Si vous souhaitez renvoyer un objet totalement nouveau, vous pouvez probablement changer de retour dans la fonction code> ci-dessous sur {... a} code> et {... Childobj } code> selon ES6 pour obtenir une nouvelle copie des objets internes.

p>

function updateObj(list, newobj){
  const result = [];
  objList.forEach(obj => {
    Object.entries(obj).map(k => {
      const newRootObj = {};
      newRootObj[k[0]] = k[1].map(childObj => {
        const a = newObj.find(nObj => nObj.id === childObj.id && nObj.name === childObj.name);
        if(a) {
          childObj.amount = a.amount;
        }
        return childObj;
      });
      result.push(newRootObj);
    });
  });
  return result;
}

const newObj=[{
    "id": "service",
    "name": "bank",
    "amount": 2000
},{
    "id": "service",
    "name": "credit",
    "amount": 5000
}];


const objList=[
{
  "btob": [{
    "id": "service",
    "name": "bank",
    "amount": 1000
  },{
    "id": "fund",
    "name": "bank",
    "amount": 2000
  },{
    "id": "others",
    "name": "bank",
    "amount": 5000
   }]
},{
 "ctob":[{
    "id": "service",
    "name": "credit",
    "amount": 1000,
    "rate": 0.4
  },{
    "id": "fund",
    "name": "credit",
    "amount": 3000,
    "rate": 0.2
  },{
    "id": "others",
    "name": "credit",
    "amount": 4000,
    "rate": 0.6
   }]
  }];

const result = updateObj(objList, newObj);
console.log(result);


0 commentaires

0
votes

Si vous vouliez une solution qui s'appuie sur tout le codage du tout - c'est-à-dire, aucun "BTOB" code> ou "CTOB" code>, vous pouvez utiliser un . mapper () code> pour boucle via objlist code>. Pour chaque élément dedans, en boucle via toutes ses paires de clés / valeur et de mettre à jour les correspondances en utilisant .Find () code>. Cela laisse également votre objet d'objet d'origine par opposition à la résilier.

Considérez l'échantillon ci-dessous où j'ai ajouté une clé supplémentaire pour démontrer l'extensibilité. P>

p>

var newObj = [
  { "id": "service", "name": "bank", "amount": 2000 },
  { "id": "service", "name": "credit", "amount": 5000 },
  { "id": "test", "name": "test", "newKey": "Hello world!"}
]; 
var objList = [
  { "btob": [{ "id": "service", "name": "bank", "amount": 1000 },{ "id": "fund", "name": "bank", "amount": 2000 },{ "id": "others", "name": "bank", "amount": 5000 }] },
  { "ctob":[{ "id": "service", "name": "credit", "amount": 1000, "rate": 0.4 },{ "id": "fund", "name": "credit", "amount": 3000, "rate": 0.2 },{ "id": "others", "name": "credit", "amount": 4000, "rate": 0.6 }]}, 
  { "dtob": [{ "id": "test", "name": "test"}]}
];

let result = objList
  .map(root => Object.keys(root)
    .reduce((output,key) => (
      {...output, [key]: root[key]
        .flatMap(i => {
          let replacement = newObj.find(f => i.id === f.id && i.name === f.name);
          return replacement ? {...i, ...replacement} : i;
        })
      }
    ), {})
  );

console.log(result);


0 commentaires