【问题标题】:How to sort an array based on Values of it's dynamic Objects如何根据动态对象的值对数组进行排序
【发布时间】:2018-10-11 21:22:12
【问题描述】:

这可能是一个愚蠢的问题,但是我怎样才能根据它的对象的值(升序 - 1 到 6)对下面给定的数组进行排序。

我不能使用对象键作为标识符,因为它是动态的并且会根据用户的设置而改变。我使用注释的解决方案让它工作,但它在 IE 中不起作用,因为 IE 还不支持“Object.values”。

$scope.data = [            
    { Type: 6 },
    { Path: 1 },
    { Text: 2 },
    { Name: 3 },
    { Icon: 5 },
    { Case: 4 }
];

$scope.data.sort(function (a, b) {
// This commented solution works fine in Chrome and FF, but not in IE since IE doesn't support "Object.values" yet.
//if (Object.values(a) < Object.values(b))
//    return -1;
//if (Object.values(a) > Object.values(b))
//    return 1;
//return 0;

if (a < b)
   return -1;
if (a > b)
   return 1;
return 0;
});

// Desired Result
$scope.data = [
    { Path: 1 },
    { Text: 2 },
    { Name: 3 },
    { Case: 4 },
    { Icon: 5 },
    { Type: 6 }
];

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以按对象的值排序。

    var data = [{ Type: 6 }, { Path: 1 }, { Text: 2 }, { Name: 3 }, { Icon: 5 }, { Case: 4 }];
    
    data.sort((a, b) => Object.values(a) - Object.values(b));
    
    console.log(data);

    在 IE11 中使用对象的第一个找到的键。

    var data = [{ Type: 6 }, { Path: 1 }, { Text: 2 }, { Name: 3 }, { Icon: 5 }, { Case: 4 }];
    
    data.sort(function (a, b) {
        return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
    });
    
    console.log(data);

    【讨论】:

    • 感谢 Nina 的快速解答。您针对 IE11 的第二个解决方案解决了该问题。 :)
    • 但是,当我将这些对象推送到该数组时,在 IE11 中遇到了另一个错误(SCRIPT1028:预期的标识符、字符串或数字): for (column in serverData) { var c; if (serverData[column] !== 0) { c = {[column] : serverData[column]}; $scope.data.push(c); } } 知道这一行可能有什么问题 - “ c = {[column] : serverData[column]};” ?
    • ie 没有计算属性。
    • var c = {}; c[列] = serverData[列];这成功了。
    【解决方案2】:

    您可以定义一个函数来为您提供所有浏览器中的对象值,包括 IE。

    这个答案有一个比我想出的更好的例子:Alternative version for Object.values()

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2021-04-26
      • 1970-01-01
      • 2016-05-14
      • 2018-11-01
      相关资源
      最近更新 更多