let aArr = [
{
id: 1,
age: 30
},
{
id: 2,
age: 32
},
{
id: 3,
age: 34
},
{
id: 4,
age: 36
},
{
id: 5,
age: 38
},
]
怎么通过提供相应的id 来把数组aArr中相应的项排到第一位:
比如 给个id:4,得到数组:
let aArr = [
{
id: 4,
age: 36
},
{
id: 1,
age: 30
},
{
id: 2,
age: 32
},
{
id: 3,
age: 34
},
{
id: 5,
age: 38
},
]
PHP纯手打
$id = 4;
foreach($arr as $key => $value){
if($arr[$key]['id'] == 4){
$arrs = $arr[0];
$arr[0] = $arr[$key];
$arr[$key] = $arrs;
}
}
不知楼主可看的明白?
update:
function todo(arr, id){
var index = 1, newArr = [], length = arr.length;
for ( var i=0; i<length; i++){
if ( arr[i].id == id ){
newArr[0] = arr[i];
}
else{
newArr[index++] = arr[i];
}
}
return newArr;
}
doto(aArr,4)
1: for() 遍历找到 aArr[i].id == 4 , 返回 下标 i; temp=aArr[i];
2: aArr.splice(i,1)
3: aArr.unshift(temp)
为什么要调整数组顺序呢, 需求本身是不是有问题
试试这个方法
var changePos = function (id) {
var index;
aArr.map(function (v, i) {
if (v.id == id) {
index = i;
return;
}
})
aArr.splice(0, 0, aArr[index])
aArr.splice(index + 1, 1);
}
找到想要的id的元素下标
如果是第一个就不用动什么了 如果不是跟第一个元素交换
function changePosition(id,array) {
var i, len = array.length;
if( len == 0 ) { return false; }
if( array[0]['id'] == id ) { return array; }
for( i = 1; i < len; i = i + 1 ) {
if( array[i]['id'] == id ) {
array.unshift(array[i]);
array.splice(i+1,1);
break;
}
}
return array;
}
封装了一个方法,可以将元素全部是对象的数组根据属性值将对应元素放到首位。
function setArrFirst(arr, property, value) {
var chooseIndex; //选中元素在数组中的索引
var areBothObj = arr.every(function(item, index, array) { //判断数组中的元素是否都为对象,都是对象则返回true
return item instanceof Object;
});
if (areBothObj) {
arr.forEach(function(item, index, array) { //遍历数组,找到符合条件的元素索引
if (item[property] == value) {
chooseIndex = index;
}
});
} else {
return false;
}
var choosed = arr.splice(chooseIndex, 1); //将选中元素从原数组中剔除
var newArr = choosed.concat(arr); //合并选中元素和剔除了选中元素的原数组
return newArr;
}
setArrFirst(aArr, 'id', 4);
//写的超烂,感觉会有更好的办法吧
var target_id = 4;
var tem,index;
for (var i = 0, len = aArr.length; i < len; i++) {
if (aArr[i]['id'] == target_id) {
tem = aArr[i];
index=i;
}
}
aArr.splice(index, 1)
aArr.unshift(tem)
console.log(aArr)