排序不适用于forEach,而是与地图一起使用

时间:2018-11-15 05:37:26

标签: javascript sorting filter foreach

我有下面的代码

Object.entries(obj)
            .map((arr) => {
                if (columnArray.indexOf(arr[0].toLowerCase()) > -1) {
                    return { value: arr[1], name: arr[0] };
                }
            })
            .sort(function(a, b) {
                return columnArray.indexOf(a.name.toLowerCase()) - columnArray.indexOf(b.name.toLowerCase());
            })

使用地图排序功能工作正常,但是当我修改了以下代码后

Object.entries(obj).filter((arr)=>columnArray.indexOf(arr[0].toLowerCase()) > -1)
                .forEach((arr) => { 
                    console.log('array value-->',arr);      
                        return { value: arr[1], name: arr[0] };                 
                })
                .sort(function(a, b) {
                    return columnArray.indexOf(a.name.toLowerCase()) - columnArray.indexOf(b.name.toLowerCase());
                })

我遇到了类似“未定义排序”的错误,有人可以在这里帮助我。

2 个答案:

答案 0 :(得分:0)

这是因为“ forEach”不返回任何内容,而map返回的是新数组,这就是为什么它与map而不是forEach一起工作的原因。使用“ forEach”,您可以在循环时修改对象,如下所示

let newArr = []
Object.entries(obj).filter((arr)=>columnArray.indexOf(arr[0].toLowerCase()) > -1)
                .forEach((arr) => { 
                    console.log('array value-->',arr);      
                        newArr.push({ value: arr[1], name: arr[0] });                 
                })

newArr.sort(function(a, b) {
              return columnArray.indexOf(a.name.toLowerCase()) - columnArray.indexOf(b.name.toLowerCase());
           })

答案 1 :(得分:0)

forEach()对每个数组元素执行一次回调函数,且returns的值undefined不是chainable

在您的情况下,您将sortforEach链接在一起将无法正常工作。

在此处forEach

查看更多信息