У меня есть два массива с именем prodArray и orderArray, как показано ниже.
prodArray = [
{productId : 1 , productName: 'abc', checked: false},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: false}
]
orderArray = [
{productId : 1 , productName: 'abc'},
{productId : 4 , productName: 'jkl'}
]
Я хочу сравнить эти два и создать массив результатов, например следующий
resultArray = [
{productId : 1 , productName: 'abc', checked: true},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: true}
]
То, что я пробовал до сих пор, выглядит следующим образом без везения
let resultArray = Array.from(new Set(prodArray .filter(f => {
return orderArray.some(o => {
return f.productId === o.productId ;
});
}).filter(x => x.checked === true)));
Кто-нибудь может помочь? Спасибо :)
Вы можете использовать map()
и find()
. Ниже приведены шаги:
map()
prodArray
return
объект со всеми предыдущими свойствами, но измените checked
find()
к orderArray
и установите результат как свойство checked
возвращаемого объекта из return.let prodArray = [
{productId : 1 , productName: 'abc', checked: false},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: false}
]
let orderArray = [
{productId : 1 , productName: 'abc'},
{productId : 4 , productName: 'jkl'}
]
let res = prodArray
.map(x => ({...x,
checked:Boolean(orderArray.find(a =>
a.productId === x.productId && a.productName === x.productName))}
))
console.info(res)
Вы можете создать переменную new Set()
, содержащую все productId
. Используйте map
, чтобы просмотреть каждый prodArray
, и используйте проверку, есть ли в наборе productId
var prodArray = [{"productId":1,"productName":"abc","checked":false},{"productId":2,"productName":"def","checked":false},{"productId":3,"productName":"ghi","checked":false},{"productId":4,"productName":"jkl","checked":false}];
var orderArray = [{"productId":1,"productName":"abc"},{"productId":4,"productName":"jkl"}]
let productIDs = new Set(orderArray.map(o => o.productId));
let result = prodArray.map(o => ({ ...o,checked: productIDs.has(o.productId)}));
console.info(result);
Вы можете взять Set
и назначить новый объект для набора результатов.
var prodArray = [{ productId: 1 , productName: 'abc', checked: false }, { productId: 2 , productName: 'def', checked: false }, { productId: 3 , productName: 'ghi', checked: false }, { productId: 4 , productName: 'jkl', checked: false }],
orderArray = [{ productId: 1 , productName: 'abc' }, { productId: 4 , productName: 'jkl' }],
orders = new Set(orderArray.map(({ productId }) => productId)),
result = prodArray.map(o => Object.assign({}, o, { checked: orders.has(o.productId) }));
console.info(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
@NabaragPaul Вы должны принять ответ, которым вы удовлетворены.