javascript - 怎么把一个数组中任意一项通过需求放到首位!
伊谢尔伦
伊谢尔伦 2017-04-10 17:48:42
[JavaScript讨论组]
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伐。

全部回复(8)
阿神
  1. 找到想要的id的元素下标

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

天蓬老师
//写的超烂,感觉会有更好的办法吧
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)
PHP中文网

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)

黄舟

封装了一个方法,可以将元素全部是对象的数组根据属性值将对应元素放到首位。

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

PHP纯手打

$id = 4;
foreach($arr as $key => $value){
       if($arr[$key]['id'] == 4){
            $arrs = $arr[0];
            $arr[0] = $arr[$key];
            $arr[$key] = $arrs;
       }
}

不知楼主可看的明白?

大家讲道理

为什么要调整数组顺序呢, 需求本身是不是有问题

PHP中文网

试试这个方法

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);
}
高洛峰
    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;
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号