原数组:
["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 都重复了.
数据分析师2017-10-01 00:16:56
배열에서 중복된 숫자를 제거하고 js에서 새 배열을 형성하는 방법은 무엇입니까? -PHP 중국어 웹사이트 Q&A - js에서 배열의 중복된 숫자를 제거하고 새 배열을 구성하는 방법은 무엇인가요? -PHP 중국어 홈페이지 Q&A
꼭 보고 배워보세요.
阿神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)