Используйте функцию для каждого значения в массиве

#javascript

#javascript

Вопрос:

Я новичок в javascript и очень ценю помощь. У меня есть следующий массив:

 let array = 
[{key: "sabc", value: 19},
 {key: "spalabc", value: 21},
 {key: "spalte2", value: 22},
 {key: "spabc2", value: 22},
 {key: "spabce2", value: 23}]  

Я хочу иметь новый массив, в котором все значения изменяются с помощью функции (в данном случае логарифмической базы 10). Итак, новый массив должен выглядеть следующим образом:

 let array = 
[{key: "sabc", value: 1.278753601},
 {key: "spalabc", value: 1.322219295},
 {key: "spalte2", value: 1.342422681},
 {key: "spabc2", value: 1.342422681},
 {key: "spabce2", value: 1.361727836}]  

Я пробовал forEach, но не получаю желаемого результата.

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

1. вы хотите использовать map . Аналогично foreach, но оно делает именно то, что вы хотите. Она сопоставляет новые значения каждому элементу.

2. почему бы вам не показать нам, что вы пробовали? Хотя идиоматический способ сделать это — с помощью map

3. @John : это изменит ваш исходный массив, следовательно, не совсем отличается от того, что вы сделали бы с .forEach() (обратите внимание, однако, что это .forEach() само возвращает undefined )

4. forEach не обязательно изменять исходный массив, на самом деле вы можете легко реализовать map в терминах foreach : arr.map(f) может быть получено как const res = []; arr.forEach(elt => res.push(f(elt)); return res; . (Конечно, я не рекомендую на самом деле делать это, когда мы map уже это сделали.)

Ответ №1:

Вы можете использовать .map :

 let array = 
[{key: "sabc", value: 19},
 {key: "spalabc", value: 21},
 {key: "spalte2", value: 22},
 {key: "spabc2", value: 22},
 {key: "spabce2", value: 23}]
 
arr = array.map(e => {
  return {...e, value:Math.log10(e['value'])};
});

console.log(...arr);  

Ответ №2:

 let array = 
[{key: "sabc", value: 19},
 {key: "spalabc", value: 21},
 {key: "spalte2", value: 22},
 {key: "spabc2", value: 22},
 {key: "spabce2", value: 23}]
 
const result = array.map(a => ({ ...a, value: Math.log10(a.value)}))

console.log(result)