Изменить параметр какого-либо объекта в другом объекте в массиве объектов - PullRequest
0 голосов
/ 14 октября 2019

У меня был такой массив объектов

[ { id: 2,
    name: 'woda',
    price: 45.98,
    quantity: 1,
    createdAt: 2019-07-23T17:50:43.033Z,
    updatedAt: 2019-07-23T17:50:43.033Z,
    shopId: 2 },
  { id: 3,
    name: 'sham',
    price: 69.98,
    quantity: 1,
    createdAt: 2019-07-23T17:50:43.033Z,
    updatedAt: 2019-07-23T17:50:43.033Z,
    shopId: 2 } ]

Все, что я хочу сделать, это параметр множественного количества с помощью newArray = [3,4], чтобы получить такой результат

[ { id: 2,
    name: 'woda',
    price: 45.98,
    quantity: 3,
    createdAt: 2019-07-23T17:50:43.033Z,
    updatedAt: 2019-07-23T17:50:43.033Z,
    shopId: 2 },
  { id: 3,
    name: 'sham',
    price: 69.98,
    quantity: 4,
    createdAt: 2019-07-23T17:50:43.033Z,
    updatedAt: 2019-07-23T17:50:43.033Z,
    shopId: 2 } ]

Ответы [ 3 ]

0 голосов
/ 14 октября 2019

var arr=[ { id: 2,
    name: 'woda',
    price: 45.98,
    quantity: 1,
    createdAt: "2019-07-23T17:50:43.033Z",
    updatedAt: "2019-07-23T17:50:43.033Z",
    shopId: 2 },
  { id: 3,
    name: 'sham',
    price: 69.98,
    quantity: 1,
    createdAt: "2019-07-23T17:50:43.033Z",
    updatedAt: "2019-07-23T17:50:43.033Z",
    shopId: 2 } ]
    
    function sometingCool(arr,multipleByThisArr){
	var i=0;
	return arr.map(x=>{
		x.quantity=x.quantity*multipleByThisArr[i];
		i++;
		return x; 
	})

}
console.log(sometingCool(arr,[3,4]))
0 голосов
/ 14 октября 2019

У вас есть два варианта сделать это. Первым выбором является использование оператора map:

let fooArray = [ { id: 2,
        name: 'woda',
        price: 45.98,
        quantity: 1,
        createdAt: '2019-07-23T17:50:43.033Z',
        updatedAt: '2019-07-23T17:50:43.033Z',
        shopId: 2 },
      { id: 3,
        name: 'sham',
        price: 69.98,
        quantity: 1,
        createdAt: '2019-07-23T17:50:43.033Z',
        updatedAt: '2019-07-23T17:50:43.033Z',
        shopId: 2 } ];
let newArray = [3,4];

Использование деструктурирующего присваивания и ... rest оператор (этот способ может быть полезен, когда вы хотитевзять вложенный объект):

fooArray = fooArray.map(({
    quantity,
    ...rest
}, i) => ({ ...rest, quantity : quantity * newArray[i]}));
console.log(fooArray);

или более простая и удобочитаемая map() функция без оператора ...rest и разрушающего присваивания:

fooArray = fooArray.map((f,i) => {
    f.quantity = f.quantity * newArray[i]
    return f;
});
console.log(fooArray);

и второй способ заключается в использованииforeach метод. Как советовал Цербр, потому что это семантически лучше, более короткий код, легче понять, когда вы хотите отредактировать только одно значение:

fooArray.forEach((e, i) => {
    e.quantity = e.quantity * newArray[i];
})
console.log(fooArray);

Что использовать - решать только вам. Мы только что показали, как вы можете достичь желаемого.

0 голосов
/ 14 октября 2019

Если вы хотите обновить каждый индекс вашего массива по номеру в том же индексе массива, простой цикл for отлично работает. Но у вас возникнет проблема, если mult короче массива

var arr = [ { id: 2,
    name: 'woda',
    price: 45.98,
    quantity: 1,
    createdAt: '2019-07-23T17:50:43.033Z',
    updatedAt: '2019-07-23T17:50:43.033Z',
    shopId: 2 },
  { id: 3,
    name: 'sham',
    price: 69.98,
    quantity: 1,
    createdAt: '2019-07-23T17:50:43.033Z',
    updatedAt: '2019-07-23T17:50:43.033Z',
    shopId: 2 } ];

var mult = [3,4];

for (var i = 0; i<arr.length; i++) {
  arr[i]['quantity'] = mult[i] * arr[i]['quantity'];
}

console.log(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...