首页  >  问答  >  正文

js怎么把一个数组里面重复的数字去掉并且组成新的数组?

原数组:

["100", "100", "2.3", "2.4", "101", "101", "3.6", "3.7"]

["100", "100", "2.3", "2.4", "101", "101", "3.6", "3.7",...."102","102".......每隔2个小数点就会有重复的,以此类推]

怎么改装成如下:

[
     {        type : "100",
        a : "2.3",
        b : "2.4"
    },
    {        type : "101",
        a : "3.6",
        b : "3.7"
    }
]

100跟101 都重复了.

phpcn_u233phpcn_u2332808 天前1131

全部回复(2)我来回复

  • 数据分析师

    数据分析师2017-10-01 00:16:56

    js怎么把一个数组里面重复的数字去掉并且组成新的数组?-PHP中文网问答-js怎么把一个数组里面重复的数字去掉并且组成新的数组?-PHP中文网问答

    围观一下哦,学习一下。

    回复
    0
  • 阿神

    阿神2017-02-11 13:23:31

    给个比较简短的示例代码,注解里有写步骤123是什么:

    const oldArray = ["100", "100", "2.3", "2.4", "101", "101", "3.6", "3.7", "102", "102", "4.1", "4.3"]
    
    // 1. 去重 ["100", "2.3", "2.4", "101", "3.6", "3.7"]
    // 2. 一维数组 转成 二维数组  [["100", "2.3", "2.4"], ["101", "3.6", "3.7"]]
    // 3. 每个数组成员组合为对象  [{ type: "100", a: "2.3", b: "2.4" }]
    
    const newArray = oldArray.filter((item, pos) => (
        oldArray.indexOf(item) === pos
      ))
      .reduce((rows, item, index) => (
        (index % 3 === 0
          ? rows.push([item])
          : rows[rows.length - 1].push(item)) && rows
      ), [])
      .map(item => (
        { type: item[0], a: item[1], b: item[2] }
      ))
    
    console.log(newArray)

    以下给个直觉用for语句的示例,自订弹性会比较高,JS中调用函数自然是花费高,所以for语句的效能会比较好,能好到多少就要视情况测试,当然代码量会多些。步骤与上面类似:

    // 1.去重
    var oneArray = [];
    
    for(var i = 0; i < oldArray.length; i++){
        if(oneArray.indexOf(oldArray[i]) === -1){
          oneArray.push(oldArray[i]);
        }
    }
    
    console.log(oneArray)
    
    // 2.一维数组 转成 二维数组
    var twoArray = [];
    
    for(var i = 0; i < oneArray.length; i += 3) {
        twoArray.push(oneArray.slice(i, i + 3));
    }
    
    console.log(twoArray)
    
    // 3. 每个数组成员组合为对象
    var threeArray = [];
    
    for(var i = 0; i < twoArray.length; i++) {
        threeArray.push({ type: twoArray[0], a: twoArray[1], b: twoArray[2] });
    }
    
    console.log(threeArray)

    实际上用for语句,步骤2与3可以合在一起:

    // 2, 3步骤可合并
    var twoAndThreeArray = [];
    
    for(var i = 0; i < oneArray.length; i += 3) {
        twoAndThreeArray.push({ type: oneArray[i], a: oneArray[i+1], b: oneArray[i+2] });
    }
    
    console.log(twoAndThreeArray)

    回复
    0
  • 取消回复