Nol*_*lan 2 javascript angularjs lodash
编辑 - 2个优雅的解决方案
来自Pranav和Bekim的两个优雅解决方案.谢谢,测试和完美工作.
一
for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;
Run Code Online (Sandbox Code Playgroud)
二
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--;
}
}
Run Code Online (Sandbox Code Playgroud)
JS TOOLS IM使用
Angular 1.5.6,lodash 4.1x
这是我有一个按字母顺序排序的对象数组的场景,例如下面的sortedData等.但是,在该数组中也是所有Other明显按字母顺序排序的catch .我想从数组中删除其他,然后移动到数组的末尾而不会弄乱当前的排序数组.
注意
我现在的方法可行,但很难看.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
);
Run Code Online (Sandbox Code Playgroud)
理想的结果
var data = [
{id:1,name:'one'},
{id:2,name:'two'},
{id:4,name:'four'},
{id:5,name:'five'}
{id:3,name:'other'},
]
Run Code Online (Sandbox Code Playgroud)
你在纯Javascript(ES6)中执行Array.findIndex,而不使用任何libs:
data.push(data.splice(data.findIndex(v => v.name == 'other'), 1)[0])
Run Code Online (Sandbox Code Playgroud)
Array.findIndex是新的,但是现在人们实际使用的大多数浏览器都有它.所以你可以使用它.(Edge支持它,但不支持IE).
如果你发现[0]丑陋,你可以使用spread来解压缩数组(这样它也可以用于多个项目并进行一些更改):
data.push(...data.splice(data.findIndex(v => v.name == 'other'), 1))
Run Code Online (Sandbox Code Playgroud)
普通(Vanilla)JavaScript会做得很好:
for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;
Run Code Online (Sandbox Code Playgroud)
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))Run Code Online (Sandbox Code Playgroud)