как получить значения одного массива объектов ключа на основе значений другого массива объектов? - PullRequest
0 голосов
/ 29 мая 2020
   data = {
{'uid': 12, 'amount': 100},
{'uid': 23, 'amount': 250}
}
object = {12:{'name':'Paul', 'id':12}, 20:{'name':'Mike', 'id':20}, 41:{'name':'Jack', 'id':41}, 23:{'name':'Luke', 'id':23}}

ожидаемый результат:

const result = {{'name':'Paul', 'id': 12, 'amount':100}, {'name':'Luke', 'id': 12, 'amount': 250}}

Я попытался сопоставить идентификаторы uid для получения и массив значений, например

uids = [12, 23]

, затем

        names = uids.map(key => object[key].name);

так что я мог использовать их для сопоставления ключей и имен в другом объекте, но не мог понять это Я знаю, что это basi c javascript, но я новичок в этом

Ответы [ 3 ]

0 голосов
/ 29 мая 2020
var data = {
{'uid': 12, 'amount': 100},
{'uid': 23, 'amount': 250}
};

var object = {12:{'name':'Paul', 'id':12}, 20:{'name':'Mike', 'id':20}, 41:{'name':'Jack', 'id':41}, 23:{'name':'Luke', 'id':23}};

var uids = [12, 23];

    mappedValues = uids.map(key => object[key]);

 var result = mappedValues.map((item, i) => Object.assign({}, item, data[i]));
console.log(result);
0 голосов
/ 29 мая 2020

Во-первых, структура data неверна. Это должен быть массив. Тогда вы можете сделать это:

   data = [
{'uid': 12, 'amount': 100},
{'uid': 23, 'amount': 250}
];


object = {12:{'name':'Paul', 'id':12}, 20:{'name':'Mike', 'id':20}, 41:{'name':'Jack', 'id':41}, 23:{'name':'Luke', 'id':23}};

for(let key in object){
  var match = data.filter(i=>i.uid.toString() === key);
  if(match && match.length){
    object[key].amount = match[0].amount;
  }
}
console.log(object)
0 голосов
/ 29 мая 2020

Вы можете просто сопоставить объект с заданными ключами.

var array = [12, 23],
    object = { 12: { name: 'Paul', id: 12 }, 20: { name: 'Mike', id: 20 }, 41: { name: 'Jack', id: 41 }, 23: { name: 'Luke', id: 23 } },
    result = array.map(key => object[key]);

console.log(result);
...