js数组处理相同属性数据

[1,1, 2,2,3,4] 到 [[1,1],[2,2],3,4 ]

阅读 2.8k
3 个回答

抛砖引玉

const data = [1, 1, 2, 2, 3, 4];
const result = Object.values(
    data.reduce((obj, cur) => {
        if (obj[cur]) {
            Object.prototype.toString.call(obj[cur]) === "[object Array]" ? obj[cur].push(cur) : (obj[cur] = [obj[cur], cur]);
        } else {
            obj[cur] = cur;
        }
        return obj;
    }, {})
);
console.log(result);

评论中的数据格式写法:

const data = [{ name: "xiaoming", round: 1 }, { name: "xiaowang", round: 1 }, { name: "xiaoli", round: 2 }, { name: "xiaowang", round: 3 }];
const result = Object.values(
    data.reduce((obj, cur) => {
        if (obj[cur.round]) {
            Object.prototype.toString.call(obj[cur.round]) === "[object Array]" ? obj[cur.round].push(cur) : (obj[cur.round] = [obj[cur.round], cur]);
        } else {
            obj[cur.round] = cur;
        }
        return obj;
    }, {})
);
console.log(result);

遍历即可,代码如下:

function action(list) {
    let result = [];
    list.forEach(l => {
        let i = result.findIndex(r => {
            if (r instanceof Array)
                return r[0] === l;
            return r === l;
        });
        if (i === -1)
            result.push(l); // 不存在就加入
        else if (result[i] instanceof Array)
            result[i].push(l); // 存在数组就加入数组
        else // 存在单个就改为数组
            result[i] = [result[i], l];
    });
    return result;
}

题主的要求不多,也不知道是否还有其他限制。

  • 原始数据是有序还是无序?
  • 原始数据的数组元素一定是数字吗?
  • 得到的结果是否需要排序?

这些都不太清楚。

var data = [1, 1, 1, 2, 2, 3, 4]

  function result(data) {
  let lastResult = null;
  let colIndex = 0;
  let array = []
  for (let i = 0; i < data.length; i++) {
    if (lastResult != data[i]) {
      colIndex++;
      array[colIndex - 1] = data[i]
    } else {
      if (array[colIndex - 1] instanceof Array) {
        array[colIndex - 1].push(data[i])
      } else {
        array[colIndex - 1] = [array[colIndex - 1], data[i]]
      }
    }
    lastResult = data[i];
  }
  return array
}

result(data) // [[1,1,1],[2,2],3,4]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题