gpt4 book ai didi

javascript高阶函数变量未定义

转载 作者:行者123 更新时间:2023-12-02 17:01:19 25 4
gpt4 key购买 nike

我有这个对象数组,并且想要给定特定键的唯一元素。该数组如下所示:

var items = [
{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 }];

我使用以下函数获取键名称的唯一元素列表:

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

所以当我执行 console.log(unique(items)) 时,我得到了正确的数组:

[ 'item1', 'item3', 'item2', 'item4', 'item5' ]

如果我将 curr.name 中的 name 更改为 year,我会得到正确的结果。我想做一个更高阶的函数,这样我就可以传递我正在处理的数组和 key ,所以我会做 unique(items, 'name') 或者 unique(items , 'year') 但是当我将我的独特函数转换为:

var unique = function (arr, criteria) {
return arr.reduce(function (prev, curr) {
if (prev.indexOf(curr.criteria) === -1) {prev.push(curr.criteria)}
return prev;
}, [])}

我做console.log(unique(items, 'name'))我得到未定义!?如果我执行 console.log(unique(items, name) ,我会收到错误 ReferenceError: name is not Defined!!

最佳答案

使用bracket notation访问该属性:

if (prev.indexOf(curr[criteria]) === -1) {prev.push(curr[criteria])}

关于javascript高阶函数变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25680872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com