Maison  >  Questions et réponses  >  le corps du texte

Comment mettre à jour les propriétés à l'aide de javascript et obtenir des résultats avec les valeurs de propriété dans un ordre consécutif dans un objet tableau

J'ai un tableau d'objets list,参数ridrorder en cours de transmission.

-> 1. Si rid与列表中的id相同,则用rorder更新itemorder > valeur.

-> 2.UpdatedList uList 属性 itemorder Si la même valeur existe, incrémentez la valeur jusqu'à son ordre consécutif (1,2, 3...n)

var rid = 23; var rvalue = 2
const list = [
  { id: 12, itemorder:null, place : 'IN' },
  { id: 24, itemorder: 1, place: 'MY' }, 
  { id: 23, itemorder: 4, place: 'AU' },
  { id: 44, itemorder: 3, place: 'SG' },
  { id: 54, itemorder: 2, place: 'CN' }, 
];

//updated List will be
const uList = [
  { id: 12, itemorder:null, place : 'IN' },
  { id: 24, itemorder: 1, place: 'MY' }, 
  { id: 23, itemorder: 2, place: 'AU' }, // updates since id and rid same // 2
  { id: 44, itemorder: 3, place: 'SG' }, // 4
  { id: 54, itemorder: 2, place: 'CN' }, // 3
];

// uList property itemorder has same value here `2`, increment until consecutive (1,2, 3...n).

Expected Output

[
  { id: 12, itemorder:null, place : 'IN' },
  { id: 24, itemorder: 1, place: 'MY' }, 
  { id: 23, itemorder: 2, place: 'AU' },
  { id: 44, itemorder: 4, place: 'SG' },
  { id: 54, itemorder: 3, place: 'CN' }, 
];
Tried 

var listChanged = list.map(e=> ({
  ...e,
  itemorder: e.id===rid ? rvalue : e.itemorder
}))

var result = listChanged.map(i => ({
  ...e,
  itemorder: (i.itemorder !== rvalue && i.itemorder > rvalue) ? (i.itemorder || 0)+1 : i.itemorder
}));
when passing var rid = 23; var rvalue = 1

Expected Output:

[
  { id: 12, itemorder:null, place : 'IN' },
  { id: 24, itemorder: 2, place: 'MY' }, // 1 becomes 2
  { id: 23, itemorder: 1, place: 'AU' }, // updates since both id and rid same
  { id: 44, itemorder: 4, place: 'SG' },//3 becomes 4
  { id: 54, itemorder: 3, place: 'CN' }, //2 becomes 3
]

no repeat values so increment, follows consecutive order (1,2,3..n)

P粉980815259P粉980815259169 Il y a quelques jours378

répondre à tous(1)je répondrai

  • P粉865900994

    P粉8659009942024-04-05 11:53:36

    var rid = 23; var rvalue = 2
    const list = [
      { id: 12, itemorder: null, place: 'IN' },
      { id: 24, itemorder: 1, place: 'MY' },
      { id: 23, itemorder: 4, place: 'AU' },
      { id: 44, itemorder: 3, place: 'SG' },
      { id: 54, itemorder: 2, place: 'CN' },
    ];
    
    let ridIdx = list.findIndex(x => x.id === rid)
    
    orderedList = list.map((l,i) => {
        if(i === ridIdx) {
            return {
            ...l,
            itemorder: rvalue
            }
        }
        if(i > ridIdx) {
            return {
                ...l,
                itemorder: l.itemorder + 1
            }
        }
        return l
    })
    
    console.log(orderedList)

    Le code ci-dessus devrait fonctionner. D'après ce que je sais de votre question jusqu'à présent, voici les étapes :

    1. Trouver des articles avec un débarras donné dans 列表
    2. Maintenant, mappez 列表 et en fonction de l'index trouvé à l'étape 1, renvoyez par défaut l'ordre des éléments en tant que rvalue si l'index de l'élément correspond à l'index ci-dessus et retournez en incrémentant l'ordre des éléments existant si l'index de l'élément est supérieur à l'index trouvé, alors le la valeur est augmentée de 1

    répondre
    0
  • Annulerrépondre