当前位置: 首页 > 面试题库 >

Javascript减少对象数组

亢建木
2023-03-14
问题内容

说我想对a.x中的每个元素求和arr

arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(a,b){return a.x + b.x})
>> NaN

我有理由相信,斧头在某些时候是不确定的。

以下工作正常

arr = [1,2,4]
arr.reduce(function(a,b){return a + b})
>> 7

我在第一个示例中做错了什么?


问题答案:

第一次迭代后,您将返回一个数字,然后尝试获取该数字的属性x以将其添加到下一个对象中,该对象是undefined和数学,其中涉及undefined结果NaN

尝试返回一个对象x,该对象包含一个属性,该属性与参数的x个属性之和:

var arr = [{x:1},{x:2},{x:4}];

arr.reduce(function (a, b) {
  return {x: a.x + b.x}; // returns object with property x
})

// ES6
arr.reduce((a, b) => ({x: a.x + b.x}));

// -> {x: 7}

从注释中添加了说明:

每次迭代的返回值在下一次迭代中[].reduce用作a变量

迭代1: ,,a = {x:1} 分配给在迭代2b = {x:2}``{x: 3}``a

迭代2:a = {x:3}b = {x:4}

您的示例的问题在于您要返回数字文字。

function (a, b) {
  return a.x + b.x; // returns number literal
}

迭代1: ,,a = {x:1} 如在下次迭代b = {x:2}``// returns 3``a

迭代2: a = 3b = {x:2}回报NaN

许多文字3不(通常)有一个叫做财产x所以它undefinedundefined + b.x回报NaN,并NaN + <anything>始终NaN

澄清
:我更喜欢我的方法,而不是该线程中的其他最高答案,因为我不同意这样的想法,即传递一个可选参数以使用幻数来减少以得出数字基元会更干净。这可能导致写入的行数减少,但imo可读性却下降。



 类似资料:
  • 我的数据: 预期Arr: 我的代码是通过删除重复的来简化模型: 但是我不能和s。 我怎么能做到呢?

  • 问题内容: 我正在运行的代码将创建包含多个用户定义类的大对象,然后必须对其进行序列化以供以后使用。据我所知,只有酸洗才能满足我的需求。我一直在使用cPickle来存储它们,但是它生成的对象大约是40G,来自运行在500 mb内存中的代码。序列化的速度不是问题,但是对象的大小是问题。我可以使用任何技巧或替代方法来使泡菜变小吗? 问题答案: 如果您必须使用pickle并且没有其他序列化方法对您有用,那

  • 我有一个对象数组 我需要这样的格式 我的代码是 但它的输出如下所示 请帮忙。谢谢你的时间

  • 问题 你有一个被其他python代码使用的callable对象,可能是一个回调函数或者是一个处理器, 但是它的参数太多了,导致调用时出错。 解决方案 如果需要减少某个函数的参数个数,你可以使用 functools.partial() 。 partial() 函数允许你给一个或多个参数设置固定的值,减少接下来被调用时的参数个数。 为了演示清楚,假设你有下面这样的函数: def spam(a, b,

  • 我想分别找到数组数组中每个数组的第一个和第二个元素的最大数量: 当前方式返回每个数组中最大数的数组。如何返回第一个元素中最大的元素和第二个元素中最大的元素?预期结果将是: