首页 > 怎么把一个数组中任意一项通过需求放到首位!

怎么把一个数组中任意一项通过需求放到首位!

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);
}

  1. 找到想要的id的元素下标

  2. 如果是第一个就不用动什么了 如果不是跟第一个元素交换


    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)
【热门文章】
【热门文章】