js数组的元素的替换

原数组是这样的
image.png
数组里面数组的的元素都是偶数

需要变成这样
image.png

那位大佬写个逻辑

阅读 3.2k
5 个回答
const rows = [];
source.map(sourceRow => {
    const row = [];
    const length = Math.floor(sourceRow.length / 2);
    for (let i = 0; i <= length; i ++) {
        row.push({x: sourceRow[2*i], y: sourceRow[2*i + 1]});
    }
    rows.push(row);
});

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

说一下思路:
最简单的办法就是先遍历外层数组,内层数组两两一组,那么可以一次进两步i+=2,然后进行转化{x:arr[i],y:arr[i+1]}最后push到当前数组中去

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

/**
         * 
         * @param {*} arr 原数组
         * @param newArr 新数组
         * 循环遍历数组如果角标为奇数的 赋值给x 偶数赋值 y
         * 
         */
        arrXy(arr){
            let newArr = Array();  
            for(let i = 0 ;i < arr.length ; i++){
                 let obj = []
                for(let j = 0 ; j < arr[i].length/2 ; j++){
                    obj.push({'x':arr[i][2*j],'y':arr[i][2*j+1]})
                }              
                newArr.push(obj)
            }
        }

一 题目描述

1 链接:

https://segmentfault.com/q/10...

2 标题:

js数组的元素的替换

3 内容:


二 全部解法

1 方案1

1)代码:

// 方案1 “自己。常规写法”
const solve = (preList = []) => {
    const l = preList.length;
    let resList = [];

    for (let i = 0; i < l; i++) {
        const tempList = preList[i],
            tempListLength = tempList.length;
        resList[i] = [];
        
        for (let j = 0; j < tempListLength; j += 2) {
            // 注:下面2行等价于 const [x, y] = [tempList[j], tempList[j + 1]]; 
            const x = tempList[j],
                y = tempList[j + 1];
            resList[i].push({x, y});
        }
    }

    return resList;
};

const preList = [
        ['a', 'b', 'c', 'd'],
        ['e', 'f'],
    ],
    resList = solve(preList);

console.log(resList);

2 方案2

1)代码:

// 方案2 “自己。1行代码 - 装X法”。
const solve = (preList = []) => preList.reduce((acc, cur) => 
    acc.concat([
        cur.map((value, index, list) => 
            index % 2 === 0 ? ({x: list[index], y: list[index + 1]}) : (null)
        ).filter(v => v !== null)
    ]), [])
;

const preList = [
    ['a', 'b', 'c', 'd'],
    ['e', 'f'],
],
resList = solve(preList);

console.log(resList);
// 下次问问题记得把试验数据给出来(贴代码的形式),如果有代码,把代码也贴出来
const source = [
    [..."abcd"],
    [..."efghij"],
    [..."klmnopqruv"]
];

// 这个就是转换函数
function transform(list) {
    return list.map(toPairList);

    function toPairList(arr) {
        return Array.from(
            Array(arr.length / 2 | 0),
            (_, i) => ({ x: arr[i * 2], y: arr[i * 2 + 1] })
        );
    }
}

// 测试
console.log(transform(source));
@NickWang 的思路是一样的,只是处理方式略有不同

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题