JavaScript 将数组元素移动到数组末尾

新手上路,请多包涵

编辑 - 2个优雅的解决方案

两个优雅的解决方案,来自 Pranav 和 Bekim。谢谢,两者都经过测试并且运行良好。

     for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;

   var res = data.slice(),
   len = res.length;

    for (var i = 0; i < len; i++) {
        if (res[i].name == 'other') {
            res.push(res.splice(i, 1)[0]);
            i--;
            len--;
        }
    }

我正在使用的 JS 工具

角度 1.5.6,lodash 4.1x

这是我有一个按字母顺序排序的对象数组的场景,例如下面的 sortedData 等。但是,在该数组中也是所有 Other 显然也是按字母顺序排序的。我想从数组中删除 other 然后移动到数组的末尾而不弄乱当前排序的数组。

笔记

我目前的以下方法有效但很丑陋。 JS、angular 或 lodash 有更优雅的东西吗?

 var data = [
    {id:1,name:'apple'},
    {id:2,name:'banana'},
    {id:3,name:'other'},
    {id:4,name:'tomato'},
    {id:5,name:'strawberry'}
];

function move(array, fromIndex, toIndex) {
    array.splice(toIndex, 1, array.splice(fromIndex, 1)[0]);
    return array;
}

var moved = move(
    data,
    _.findIndex(data, ['name', 'other']),
    Object.keys(data).length
);

理想的结果

 var data = [
        {id:1,name:'one'},
        {id:2,name:'two'},
        {id:4,name:'four'},
        {id:5,name:'five'}
        {id:3,name:'other'},
    ]

原文由 Nolan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

一个普通的(Vanilla)JavaScript 就可以了:

  for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;

 var data = [
    {id:1,name:'apple'},
    {id:2,name:'banana'},
    {id:3,name:'other'},
    {id:4,name:'tomato'},
    {id:5,name:'strawberry'}
];

for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;

console.log( data );

原文由 Bekim Bacaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

您在纯 Javascript (ES6) 中执行 Array.findIndex,而不使用任何库:

 data.push(data.splice(data.findIndex(v => v.name == 'other'), 1)[0])

Array.findIndex 是新的,但现在人们实际使用的大多数浏览器都有它。所以你可能会使用它。 (Edge 支持,但 IE 不支持)。

如果您发现 [0] 丑陋,您可以使用 spread 来解压缩数组(这样它也可以用于多个项目并进行一些更改):

 data.push(...data.splice(data.findIndex(v => v.name == 'other'), 1))

原文由 odinho - Velmont 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题