将数组中的项目移动到最后一个位置

问题描述 投票:0回答:9

我有一个对象数组。我想将选定的对象移动到数组中的最后一个位置。我如何在 javascript 或 jquery 中执行此操作?

这是我的一些代码:

var sortedProductRow = this.product_row;

for (var s in sortedProductRow) {
    if (sortedProductRow[s]["parent_product_type"] != "")
        // Move this object to last position in the array
}

我使用 for 循环对此进行循环,并且我希望对输出进行排序,以便所有没有“parent_product_type”值的对象首先出现,然后是具有值的对象。

javascript arrays sorting
9个回答
156
投票

要将元素(您知道其索引)移动到数组的末尾,请执行以下操作:

array.push(array.splice(index, 1)[0]);

如果您没有索引,只有元素,则执行以下操作:

array.push(array.splice(array.indexOf(element), 1)[0]);

示例:

    var arr = [1, 2, 6, 3, 4, 5];
    arr.push(arr.splice(arr.indexOf(6), 1)[0]);
    console.log(arr); // [1, 2, 3, 4, 5, 6]

注意:

这只适用于数组(使用

[ ... ]
语法创建或
Array()
)不与对象(使用
{ ... }
语法创建或
Object()


20
投票

将数组的第一个元素移动到同一数组的末尾

var a = [5,1,2,3,4]; a.push(a.shift()); console.log(a); // [1,2,3,4,5]

或者这样

var a = [5,1,2,3,4]; var b = a.shift(); a[a.length] = b; console.log(a); // [1,2,3,4,5]

将数组的

任何元素移动到同一数组中的任何位置

// move element '5' (index = 2) to the end (index = 4) var a = [1, 2, 5, 4, 3]; a.splice(4,0,a.splice(2,1)[0]); console.log(a); // [1, 2, 4, 3, 5]

或者它也可以转换为原型,就像这样,其中

x

表示元素的当前位置,而

y
表示数组中的新位置

var a = [1, 2, 5, 4, 3]; Array.prototype.move = function(x, y){ this.splice(y, 0, this.splice(x, 1)[0]); return this; }; a.move(2,4); console.log(a); // ["1", "2", "4", "3", "5"]

回复@jkalandarov 评论

function moveToTheEnd(arr, word){ arr.map((elem, index) => { if(elem.toLowerCase() === word.toLowerCase()){ arr.splice(index, 1); arr.push(elem); } }) return arr; } console.log(moveToTheEnd(["Banana", "Orange", "Apple", "Mango", "Lemon"],"Orange"));



12
投票

const changedArr = [...prevArr.filter(a => a !== element), element]



9
投票

const colors = ['white', 'black', 'red', 'blue', 'green']; // will push the blue to the end of the array colors.push(colors.splice(colors.indexOf('blue'), 1).pop()); console.debug(colors); // ["white", "black", "red", "green", "blue"]



5
投票

let concatToEnd = function (arr, val) { return arr.filter(function(x) { return x !== val; // filter items not equal to value }).concat(arr.filter(function(x) { // concatonate to filtered array return x === val; // filter items equal to value }) ); } // invoke concatToEnd(array, 'parent_product_type');

您可能可以进一步缩短:

let concatToEnd = (arr,val) => arr.filter(x => x !== val).concat(arr.filter(x => x === val))

此函数过滤
不等于

传入的值的项目,然后连接另一个filter函数的结果(到过滤数组的末尾),该函数过滤掉

等于
值的项目你已经通过了。

此函数本质上将数组分成 2 个过滤部分,然后将它们连接在一起

尚未针对您的用例进行测试,但我使用了类似的方法将数组的所有数字移动到索引的末尾。


1
投票

lodash 用户: const array = ['A', 'B', 'C', 'D'] // output: A, B, C, D // finds index of value 'B' and removes it _.pull(array , 'B') // output: A, C, D // adds value of 'B' to last position _.concat(array , 'B') // output: A, C, D, B



1
投票

const myArray = [1, 0, 3, 5, 0, 'a', 3, 's'] const moveZerosToEnd = (arr) => { return arr.filter(item => item !== 0).concat(arr.filter(item => item === 0)) } console.log(myArray) // [1, 0, 3, 5, 0, 'a', 3, 's'] console.log(moveZerosToEnd(myArray)) // [1, 3, 5, 'a', 3, 's', 0, 0]


0
投票
拼接

移动任意数量的物品,然后将它们展开 const numberOfItems = 3; let items = [1,2,3,4,5,6,7,8,9]; items.push(...items.splice(0, itemsToMove))



0
投票

const arr = ['a', 'f', 'b', 'c', 'd', 'e']; arr.sort((_x, y) => { if (y === 'f') { // 'f' is the item that I want to move. return -1; } return 0; })

这相当于就地数组排序方法。

© www.soinside.com 2019 - 2024. All rights reserved.