JavaScript将数组元素移动到数组

时间:2016-06-10 02:10:33

标签: javascript angularjs lodash

编辑 - 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 TOOLS IM使用

Angular 1.5.6,lodash 4.1x

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

注意

我目前的方法有效,但很难看。 JS,棱角分明还是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'},
    ]

3 个答案:

答案 0 :(得分:5)

普通(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( JSON.stringify(data))

答案 1 :(得分:5)

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

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

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

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

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

答案 2 :(得分:2)

使用简单的for loop

names.filter(function(eachObject){ return eachObject.id !== '202';})