编辑 - 3个优雅的解决方案
三个解决方案,来自odinho、Pranav和Bekim。感谢你们,经过测试完美运行。
一个(@odinho - 非常酷)
data.push(...data.splice(data.findIndex(v => v.name == 'other'), 1))
两个(也是一个很棒的一句话)
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工具
Angular 1.5.6,lodash 4.1x
这是我的情况:我有一个按字母顺序排序的对象数组,例如下面的sortedData等等。然而,在该数组中还有一个名为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'},
]
var copy = JSON.parse(JSON.stringify(data));
复制data
数组。 - seahorsepip