javascript - 当涉及键值对时,你可以使用 Javascript Array Map 或 Reduce 吗?

标签 javascript arrays object

像这样获取一个数字数组,并用每个数字创建一个新数组,前一个数字的总和可以这样完成:

let numbers = [1, 2, 3, 4]
let total = 0
numbers.map(v => total += v)

// result 
// [1, 3, 6, 10]

如果数组包含具有键/值对的对象,是否可以使用相同的方法,或者我是否必须使用不同的方法?

var numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]

结果将是相同的键与值相加。

var numbers = [{ val1: 1, val2: 3, val3: 6, val4: 10 }]

编辑:所有这些答案都在 fiddle 中起作用,但在我的代码中唯一起作用的是

numbers.map(o => Object.assign(...Object.entries(o).map((s => ([k, v]) => ({ [k]: s += v}))(0))));

最佳答案

Array.map() 迭代数组.使用 Object.entries()要从对象中获取键/值对,请使用 Array.reduce() 迭代这些对, 并以 total 为值重建对象。

注意:迭代顺序可能会根据 traversal order of object properties in ES6 而改变.

const numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]
let total = 0
const result = numbers.map(n => Object.entries(n)
  .reduce((r, [k, v]) => {
    total += v;
    r[k] = total;
    return r;
  }, {}));
  
console.log(result);

关于javascript - 当涉及键值对时,你可以使用 Javascript Array Map 或 Reduce 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162263/

相关文章:

c - 将值从文件存储到 C 中的结构数组

javascript - 在javascript中从多维数组或对象中删除元素

javascript - 添加链接时 JQuery 停止工作

java - 在 ArrayList() 中查找最常见的 String

java - 使用 ByteBuffer 处理 byte[]

javascript - Eloquent Javascript 列表返回 undefined ,为什么?

java - 如何在 Java 中循环访问对象值

javascript - 如何使中间项目的 slider 比其他项目大?

javascript - 如何使用 jQuery 选择鼠标悬停的图像?

javascript - 从父表中查找子表选择器 - jQuery