【问题标题】:Sort is not working with forEach instead it is working with map排序不与 forEach 一起使用,而是与 map 一起使用
【发布时间】:2018-11-15 05:37:25
【问题描述】:

我有以下代码

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());
                })

我收到一个错误,比如“排序未定义”,有人可以帮我看看吗。

【问题讨论】:

  • forEach()返回....
  • .forEach 不返回任何内容。 .map 返回新数组。两者不可互换。

标签: javascript sorting filter foreach


【解决方案1】:

这是因为“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());
           })

【讨论】:

    【解决方案2】:

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

    在您的情况下,您将 sortforEach 链接起来,这是行不通的。

    在此处查看更多信息forEach

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 2016-12-20
      • 2013-09-01
      • 2014-05-21
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多