json 数组对象操作,数据交换位置

操作数据

aa = [{index: '1', count: 10},{index: '2', count: 20},{index: '3', count: 30},{index: '4', count: 40}]

用一个方法 实现对象前后位置交换

交换后如

aa = [{index: '2', count: 20},{index: '1', count: 10},{index: '3', count: 30},{index: '4', count: 40}]
或
aa = [{index: '1', count: 10},{index: '2', count: 20},{index: '4', count: 40},{index: '3', count: 30}]
阅读 3.7k
4 个回答

供参考:

for (let i = 0, len = foo.length; i < len; i++) {
  if (i % 2 === 0 && foo[i + 1]) {
    const temp = foo[i];
    foo[i] = foo[i + 1];
    foo[i + 1] = temp;
  }
}
// 保证长度是偶数(如果是奇数忽略最后一个元素)
const length = aa.length - aa.length % 2;
for (let i = 0; i < length; i += 2) {
    // 使用解构赋值语法交换数据
    [aa[i], aa[i + 1]] = [aa[i + 1], aa[i]];
}

console.log(aa);

如果要保留原数组,结果放在新的数组中

/** 
 * 交换 arr 中的奇偶元素,得到一个新的数组(原数组不变)
 */
function mapTo(arr) {
    // 偶序号取下一个,奇序号取上一个
    const offsets = [1, -1];
    // 最后的 ?? arr[i] 是为了最后一个奇数的情况,但前提是原数组中没有 null 或 undefined
    return arr.map((_, i, a) => a[i + offsets[i % 2]] ?? a[i]);
}
console.log(mapTo(aa));
console.log(aa);

image.png

aa = [{index: '1', count: 10},{index: '2', count: 20},{index: '3', count: 30},{index: '4', count: 40}]
let swapArray = (arr=[],orig=0,targ=0)=>{
    return [arr[targ],arr[orig]] = [arr[orig],arr[targ]];
}
swapArray(aa,0,1);
console.log(aa);

最简单就是临时变量
image.png

let swapArray = (arr=[],orig=0,targ=0)=>{
     var temp = arr[orig];
     arr[orig] = arr[targ];
     arr[targ] = temp;
}
swapArray(aa,0,1);
console.log(aa);
function swap(arr, i, j) {
    if (i in arr && j in arr && i !== j) {
        arr = arr.slice();
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    return arr;
}
console.dir(swap(aa, 0, 1));
console.dir(swap(aa, 2, 3));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题