Изменить спецификацию c имя: значение пары в Javascript объекте - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь просто написать функцию для преобразования одного из значений свойства в моем JS объекте в целое число, в частности, преобразовать свойство веса для каждого фрукта из строки ("200g") в целое число (200 )

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
   ];

Я хотел бы написать fn c для преобразования веса из str в int, а затем сохранить все как новый JS объект - new_basket. Я не совсем уверен, как структурировать функции в JS, но у меня вот так:

for(var i=0; i<basket.length; i++) {
    new_basket = parseInt(basket.weight);
    console.log(new_basket)
}

Я видел примеры с forEach, но они конвертировали бы все свойства, тогда как я просто хотел бы, чтобы все Вес пересчитан. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

basket - это список, поэтому вам необходимо получить доступ к каждому объекту с помощью оператора []. Вы можете сделать это следующим образом:

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
];

for(var i=0; i<basket.length; i++) {
    new_basket = parseInt(basket[i].weight);
    console.log(new_basket)
}
0 голосов
/ 05 апреля 2020

Вам нужно будет использовать Object.assign для объединения нового ключа / значения с исходным объектом, внутри нового объекта .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Кроме того, использование функции более высокого порядка, например map, может сделать ваш код немного более читабельным и позволяет создавать цепочки. map перебирает массив и возвращает новый массив. Он принимает обратный вызов, когда могут произойти все ваши преобразования.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

В вашем случае вы можете попробовать что-то вроде этого:

const newFruits = fruits.map(fruit => {
    return Object.assign(fruit, { weight: parseInt(fruit.weight) })
})

Функция просматривает результаты, а затем использует Object.assign для объединения нового ключа / значения с исходным объектом.

Вот обязательный подход ES6 [и сокращение]:

const newFruits = fruits.map(({weight, ...fruit}) => ({
    ...fruit,
    weight: +weight
})
0 голосов
/ 05 апреля 2020

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
   ];

basket.forEach((data,i)=>{
  data['weight']=Number(String(data['weight']).replace('g',''))
})
console.log(basket);

Вот вам go, надеюсь, это поможет. если так, я рад!

basket.forEach((data,i)=>data['weight']=Number(String(data['weight']).replace('g','')));

в одну строку, чистый код внесет изменения в существующий массив.

...