javascript - 在 JavaScript reduce 中返回三元运算符

标签 javascript arrays indexof reduce

我有这样的数据结构:

var example = [
    { name: "item1", year: 2013, value: 100 },
    { name: "item1", year: 2012, value:  97 },
    { name: "item3", year: 2013, value:  93 },
    { name: "item3", year: 2012, value:  91 },
    { name: "item2", year: 2012, value:  -6 },
    { name: "item2", year: 2011, value:  -5 },
    { name: "item4", year: 2012, value: -36 },
    { name: "item3", year: 2011, value:  93 },
    { name: "item4", year: 2013, value: -35 },
    { name: "item1", year: 2011, value:  98 },
    { name: "item2", year: 2013, value:  -7 },
    { name: "item4", year: 2011, value: -37 },
    { name: "item5", year: 2013, value:  58 },
    { name: "item5", year: 2012, value:  55 },
    { name: "item5", year: 2011, value:  54 }
];

我正在使用这个函数来获取单个元素的数组:

example.reduce(function (prev, curr) {
    if (prev.indexOf(curr.name) === -1) prev.push(curr.name);
    return prev;
}, []);

虽然这可行,但我尝试使用三元运算符来提高可读性,如下所示:

example.reduce(function (prev, curr) {
    return prev.indexOf(curr.name) === -1 ? prev.push(curr.name) : prev;
}, []);

我在 Chrome 中收到以下错误:

Uncaught TypeError: prev.indexOf is not a function
    at <anonymous>:3:13
    at Array.reduce (native)
    at <anonymous>:2:9
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

这是为什么?

最佳答案

是因为调用.push()将返回数组的新长度,它是一个数字,因此第二次调用 prev 将是一个没有 push 方法的数字 (1)。

Returns

The new length property of the object upon which the method was called.

因此,使用 if 条件会更好。

如果你仍然想使用三元运算符,你可以使用像这样的 hacky 解决方案

var b = example.reduce(function (prev, curr) {
    return prev.indexOf(curr['name']) === -1 ? prev.push(curr['name']) && prev : prev;
}, []);

关于javascript - 在 JavaScript reduce 中返回三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30722724/

相关文章:

javascript - 样式化的组件不在 React Iframe 中呈现?

javascript - 使用 d3 和 dc.js 自定义时间线刻度

java - 无法将 BasicDBList 转换为数组 (java)

python - list[::] 和 list 有什么区别?

python - 索引错误 : cannot fit 'int' into an index-sized integer

javascript - 在 array.indexOf(x) 中搜索总是返回 -1 即使该值存在

javascript - 索引() : is there a better way to implement this?

javascript - 如何通过将 Redux 连接的 React 组件导出为 PureComponent 来测试它?

ios - 按索引移动数组中的元素

javascript - 仅当应用程序移至后台时才会激活 Cordova 相机