Перенос значений из разных массивов в разные ключи

#javascript #arrays #json #object #array-merge

#javascript #массивы #json #объект #массив-слияние

Вопрос:

у меня есть 2 таких массива :

 let payrollname = [{"code": "a1", "name": "Loan A"}, {"code": "a2", "name": "Loan B"}, {"code": "a3", "name": "Loan C"}, {"code": "a4", "name": "Loan D"}, {"code": "a5", "name": "Loan E"}]
 

и

 let payrollbalance = [{"a1": 0, "a2": 100000, "a3": 500000, "a4": 300000, "a5": 45900}]
 

как я могу передавать значения из payrollbalance в payrollname ?

я имею в виду нажатие, подобное этому, значения, из payrollbalance.a4 которых означают 300000 нажатие на payrollname.code == a4

и я надеюсь, что конечные результаты могут быть похожи на :

 let result = `[{"code": "a1", "name": "Loan A", "values": 0}, {"code": "a2", "name": "Loan B", , "values": 100000}, {"code": "a3", "name": "Loan C", "values": 500000}, {"code": "a4", "name": "Loan D", "values": 300000}, {"code": "a5", "name": "Loan E",  "values": 45900}]`
 

любая помощь будет оценена, я уже испортил целые дни.

заранее спасибо

Комментарии:

1. Есть ли причина payrollbalance в массиве? Может ли у него быть более одного объекта?

2. @Nick Parsons нет, только 1 длина. и всегда.

3. Хорошо, можете ли вы также добавить свои попытки в far (даже если они не работают?), Тогда вы сможете увидеть, где вы ошиблись

4. @NickParsons я пытаюсь манипулировать рендерингом во внешнем интерфейсе (потому что я не могу изменить их серверную часть) like this.state.payrollbalance '.a4' , но возврат всегда будет [object Object].a4

5. @Tumbalakun Лучше поделиться попыткой ответить на такой вопрос и выяснить, что пошло не так, вместо того, чтобы ожидать, что кто-то решит это за вас. До сих пор вы путались весь день, если кто-то решит это за вас, вы будете путаться всю жизнь.

Ответ №1:

Используйте Array.map() и добавляйте values ключ со значением payrollbalance[0] с указанием ключа json [] для dynamic .

 let payrollname = [{"code": "a1", "name": "Loan A"}, {"code": "a2", "name": "Loan B"}, {"code": "a3", "name": "Loan C"}, {"code": "a4", "name": "Loan D"}, {"code": "a5", "name": "Loan E"}]

let payrollbalance = [{"a1": 0, "a2": 100000, "a3": 500000, "a4": 300000, "a5": 45900}]

let result = payrollname.map(item => ({
  ...item,
  values: payrollbalance[0][item.code]
}));

console.log(result); 

Ответ №2:

Сделайте поиск по массиву, найдите индекс и измените его после

 let payrollname = [{"code": "a1", "name": "Loan A"}, {"code": "a2", "name": "Loan B"}, {"code": "a3", "name": "Loan C"}, {"code": "a4", "name": "Loan D"}, {"code": "a5", "name": "Loan E"}]
let payrollbalance = [{"a1": 0, "a2": 100000, "a3": 500000, "a4": 300000, "a5": 45900}]
var result = [];
let pblance = payrollbalance[0]
for(let p in pblance)
{
  let index = payrollname.findIndex(el => el.code==p)
  let pname = payrollname[index]
  pname.values = pblance[p];
  result.push(pname)
}
console.log(result); 

Комментарии:

1. поскольку вы нашли index внутри цикла for() , обозначение o будет o(n * n) , то производительность не очень хорошая.

2. @WilliamWang я должен использовать .indexOf вместо findIndex

3. нет, это то же самое. indexOf также выполните итерацию массива.

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

Ответ №3:

этот код будет работать!

 let payrollname = [{"code": "a1", "name": "Loan A"}, {"code": "a2", "name": "Loan B"}, {"code": "a3", "name": "Loan C"}, {"code": "a4", "name": "Loan D"}, {"code": "a5", "name": "Loan E"}]
let payrollbalance = [{"a1": 0, "a2": 100000, "a3": 500000, "a4": 300000, "a5": 45900}]
let result = []
let i = 0
payrollname.forEach(element => {
    let value = payrollbalance[0][element.code]
    element.values = value;
    result[i] = element
    i=i 1
});
console.log(result)