Как назначить значения по свойству в массиве вложенных объектов с помощью JavaScript - PullRequest
0 голосов
/ 24 апреля 2019

Я хотел бы знать, как присваивать значения свойству объекта во вложенном объекте с помощью id=insta в javascript

У меня есть два объекта, мне нужно применить одно свойство объекта к другому, используя JavaScript

Я застрял и не знаю, как действовать,

obj1.forEach(e=> {if(e.id==='insta') Object.assign(e, obj2)})
var obj1 = [
  {
    id: "insta",
    rate: "2.4",
    fee: "0",
    amount: "400"
  },
 {
    id: "trans",
    rate: "1.4",
    fee: "0",
    amount: "200"
  }
]

var obj2 = 
{
  data: {
     rate_value: "4.4",
     fee_value: "10",
     targetamount: "5000",
     country_code: "SG"
   }
}

Expected Output: 

res= [
  {
    id: "insta",
    rate: "4.4",
    fee: "10",
    amount: "5000",
    country_code: "SG"
  }
]

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Как показывает ожидаемый результат, вам нужны только те элементы, у которых id="insta", поэтому используйте filter(), чтобы получить их.Затем используйте map() и создайте временный объект внутри карты.И вернуть объединенный объект, используя Spread Operator.

Примечание: Вам необходимо создать другой объект, потому что имя свойства в obj2 и массив отличаются.

var obj1 = [ { id: "insta", rate: "2.4", fee: "0", amount: "400" }, { id: "trans", rate: "1.4", fee: "0", amount: "200" }]
var obj2 = { data: { rate_value: "4.4", fee_value: "10", targetamount: "5000", country_code: "SG" } }

const res = obj1.filter(x => x.id === "insta").map(x => {
  const {data} = obj2
  let temp = {
    rate : data.rate_value,
    fee : data.fee_value,
    amount : data.targetamount,
    country_code : data.country_code
  }
  return {...x,...temp}
})


console.log(res)
0 голосов
/ 24 апреля 2019

Прежде всего, вы можете Array.filter массив, содержащий объект с id = "insta", затем применить данные из obj2 к каждому из элементов, используя Array.map .

Примерно так:

var obj1 = [{
    id: 'insta',
    rate: '2.4',
    fee: '0',
    amount: '400',
  },
  {
    id: 'trans',
    rate: '1.4',
    fee: '0',
    amount: '200',
  },
];

var obj2 = {
  data: {
    rate_value: '4.4',
    fee_value: '10',
    targetamount: '5000',
    country_code: 'SG',
  },
};

const result = obj1
  .filter(item => item.id === 'insta')
  .map(item => ({
    id: item.id,
    rate: obj2.data.rate_value,
    fee: obj2.data.fee_value,
    amount: obj2.data.targetamount,
    country_code: obj2.data.country_code,
  }));
  
  console.log(result)
0 голосов
/ 24 апреля 2019

Мы можем использовать метод reduce , чтобы привести массив к полученному результату. Здесь я добавляю if условие и значения сопоставления из obj2 в обратный вызов метода reduce. В основном фильтрация и сопоставление выполняются внутри метода обратного вызова reduce.

var obj1 = [{
    id: "insta",
    rate: "2.4",
    fee: "0",
    amount: "400"
  },
  {
    id: "trans",
    rate: "1.4",
    fee: "0",
    amount: "200"
  }
]

var obj2 = {
  data: {
    rate_value: "4.4",
    fee_value: "10",
    targetamount: "5000",
    country_code: "SG"
  }
}

const result = obj1.reduce((acc, curr) => {
  if (curr.id === 'insta') {
    acc.push({
      ...curr,
      rate: obj2.data.rate_value,
      fee: obj2.data.fee_value,
      amount: obj2.data.targetamount,
      country_code: obj2.data.country_code
    })
  }
  return acc;
}, []);

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