我试图找到一种方法将对象移动到数组的末尾
我有这个对象数组:
[
{"id":"4","name":"Boaz"},
{"id":"2","name":"Shareen"},
{"id":"3","name":"Simon"},
{"id":"1","name":"Miriam"}
]
我想移动整套 {" id":" 3"," name":" Simon"} 到最后。我有这个here的解决方案。但我的问题是,每当特定对象没有进入第二位置时,有没有办法检查id=3
的对象并将其转换为使用underscoreJS
结束
答案 0 :(得分:5)
你可以只对数组进行排序。
Array.sort需要3个可能的值作为返回值。
a
大于b
,a
将移至比b
更高的索引a
等于b
,且不会进行任何更改。a
小于b
,a
将移至低于b
的索引。有关详细信息,请参阅:How does Javascript's sort() work?
var data = [
{"id":"4","name":"Boaz"},
{"id":"2","name":"Shareen"},
{"id":"3","name":"Simon"},
{"id":"1","name":"Miriam"}
]
data.sort(function(a,b){
return a.id == 3 ? 1 : 0
})
console.log(data)

另一种方法可以过滤掉具有必要id的对象,将它们从当前位置移除并将它们推回去,但这在我的理解中是太多的工作。排序是将对象向上或向下移动的理想方式。
答案 1 :(得分:1)
做一些简单的数组操作
var obj = [{
"id": "4",
"name": "Boaz"
},
{
"id": "2",
"name": "Shareen"
},
{
"id": "3",
"name": "Simon"
},
{
"id": "1",
"name": "Miriam"
}
];
obj.forEach(function(v, i) {
if (v.id == 3) {//test to see if the id is 3
obj.push(obj[i]);//push the object to the last position
obj.splice(i, 1);//remove the object from the current position
}
});
console.log(obj);
答案 2 :(得分:1)
function findIdIndex(id, array) {
return array.findIndex(elem=>elem.id===id);
}
这将为您提供具有给定ID的集合的位置,您之前的问题的答案涵盖了您想要做的其余部分。
答案 3 :(得分:1)
虽然没有"开箱即用"下划线函数,我们可以使用_.mixin()
函数使用我们自己的函数扩展基础库。
扩展通过使用下划线_.indexOf()
函数来返回与谓词匹配的元素的索引。然后,我们使用本机JS splice
函数删除返回索引处的1
项(请注意,如果_.indexOf
返回-1
<,则会使数组不受影响/ em>的)。根据文档splice
,返回已删除的所有元素的数组。我们最后使用本机JS concat
函数,它将两个(或更多)数组合并在一起,将返回的值从concat
放到提供的数组的末尾(arr
)。
UnderscoreJS延伸
(function(_) {
"use strict";
_.mixin({
moveToEndWhere: moveToEndWhere
});
/**
* @function moveToEndWhere
* @desc Searches an array for the first item matching a predicate, and moves the matched element to the end of the array
* @param {array} arr Array to be searched and altered
* @param {function|object} predicate Function or object used to search for matching element
* @returns {array} Updated array
* @memberof _.mixin
*/
function moveToEndWhere(arr, predicate){
return arr.concat(
arr.splice(
_.indexOf(arr, predicate)
, 1
)
);
}
})(_);
<强>用法强>
var data = [
{"id":"4","name":"Boaz"},
{"id":"2","name":"Shareen"},
{"id":"3","name":"Simon"},
{"id":"1","name":"Miriam"}
];
data = _.moveToEndWhere(data, {"id":3});
答案 4 :(得分:1)
我建议使用比较的增量,不仅如果你有多个真正的比较,但你需要进行对称比较,如果b
包含要在最后排序的项目,那么你得到了订单,你想要。
var array = [{ id: "4", name: "Boaz" }, { id: "2", name: "Shareen" }, { id: "3", name: "Simon" }, { id: "1", name: "Miriam" }];
array.sort(function (a, b) {
return (a.id === '3') - (b.id === '3');
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 5 :(得分:0)
首先编写一个这样的方法,将值发送为&#39; 3&#39;并获取索引attr
为id
function getElementIndex(array, attr, value) {
for(var i = 0; i < array.length; i += 1) {
if(array[i][attr] === value) {
return i;
}
}
return -1;
}
通过此方法,您可以使用任何属性来获取数据。
然后写
var index=getElementIndex(array,'id','3');//here array is your data array you have
var itemToReplace = array.splice(index, 1);
array = array.concat(itemToReplace);
答案 6 :(得分:0)
您可以尝试使用相应对象的获取索引,然后检查位置:
var array = [{ "id": "4", "name": "Boaz" }, { "id": "2", "name": "Shareen" }, { "id": "3", "name": "Simon" }, { "id": "1", "name": "Miriam" }];
var index = array.findIndex(x => x.id == 3);
if(index === 2) {
var person = array.splice(index, 1);
array = array.concat(person);
}
console.log(array)
&#13;