js数组嵌套和数组去重的问题

去除嵌套的思路:

用递归、reduce()、concat()来实现。

递归解决多层嵌套,reduce()解决每层数组的迭代拼接,concat()来拼接数组即拆除一层嵌套。

let sum = [0, 1, 2, 3].reduce(function(acc, val) {                //数组_实现flatten()函数,拆嵌套
  return acc + val;
}, 0);
console.log(sum);
// 6
let list1 = [[0, 1], [2, 3], [4, 5]];
let list2 = [0, [1, [2, [3, [4, [5, [6]]]]]]];
const flatten = (arr) => {
    return arr.reduce(
        (acc, val) => {
            return acc.concat(Array.isArray(val) ? flatten(val) : val)
        }, []
    );
};
c(flatten(list1));
// [0, 1, 2, 3, 4, 5]
c(flatten(list2));
// [ 0, 1, 2, 3, 4, 5, 6 ]


数组去重的思路:

1.创建一个新的数组存放结果

2.创建一个空对象

3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

代码如下:

Array.prototype.unique3 = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());


更简短的数组去重代码

利用filter()和indexOf()方法实现数组去重:

var arr = [1, 3, 2, 5, 2, 1, 4, 2, 1];
arr = arr.filter(function(item,index,array){
    return array.indexOf(item) === index;
  });
c(arr);

数组去除嵌套再去重:

function unite(arr1, arr2, arr3) {                        //数组拆嵌套再去重
    for(var i=1;i<arguments.length;i++)
    {
        arr1.push(arguments[i]);
    }
    const flatten = (arr) => {
        return arr.reduce(
            function(acc,val) {
            return acc.concat(Array.isArray(val) ? flatten(val) : val);
        },[]);
    };
    arr1 = flatten(arr1);
    // var obj = {};
    // var array = [];
    function unique(array1){
    return array1 = array1.filter(function(item,index,array){
    return array1.indexOf(item) === index;
  });
    }
    arr1 = unique(arr1);
    return arr1;
}
c(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]));



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用双重循环来实现Java数组的去重,其中外层循环遍历数组中的每一个元素,内层循环则从当前元素的下一个位置开始遍历,如果找到了与当前元素相同的元素,则将该元素删除。具体实现可以参考以下代码: ```java public static int[] removeDuplicates(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] == arr[j]) { arr[j] = arr[len - 1]; // 将重复元素替换为数组末尾的元素 len--; // 数组长度减1 j--; // 内层循环变量j也要减1,以便检查替换后的新元素 } } } // 创建一个新数组,将去重后的元素复制到新数组中 int[] newArr = new int[len]; System.arraycopy(arr, 0, newArr, 0, len); return newArr; } ``` 这个方法可以处理任何类型的Java数组,包括int、double、String等。 ### 回答2: 要用for循环对Java数组进行去重,可以按照以下步骤进行操作: 1. 创建一个新的空数组来存放去重后的元素。 2. 使用for循环遍历原数组中的每个元素。 3. 在循环中,使用一个flag变量来判断当前元素是否已经存在于新数组中。 4. 再次使用一个嵌套的for循环遍历新数组中的元素,与当前元素进行比较。 5. 如果找到相同的元素,则将flag设置为true,表示当前元素重复。 6. 如果在内部循环结束后,flag仍然为false,则表示当前元素是唯一的,可以将其添加到新数组中。 7. 最后,将新数组返回作为去重后的结果。 以下是一个简单的示例代码: ```java public class ArrayDuplicateRemoval { public static void main(String[] args) { int[] arr = {1, 2, 3, 2, 4, 3, 5}; int[] newArr = removeDuplicates(arr); System.out.println("去重后的数组为:"); for (int i = 0; i < newArr.length; i++) { System.out.print(newArr[i] + " "); } } public static int[] removeDuplicates(int[] arr) { int[] newArr = new int[arr.length]; int index = 0; for (int i = 0; i < arr.length; i++) { boolean flag = false; for (int j = 0; j < index; j++) { if (arr[i] == newArr[j]) { flag = true; break; } } if (!flag) { newArr[index++] = arr[i]; } } int[] result = new int[index]; System.arraycopy(newArr, 0, result, 0, index); return result; } } ``` 以上代码中,我们通过两次for循环来实现去重功能。时间复杂度为O(n^2),即需要遍历两次数组。最后将去重后的结果赋值给新的数组,并返回。 ### 回答3: java数组去重可以使用for循环来实现。可以使用两层for循环进行遍历,比较数组中的元素是否重复。首先,外层for循环遍历数组中的每一个元素,内层for循环则用来比较当前元素和后面的元素是否相等。如果相等,则使用数组的System.arraycopy()方法将后面的元素向前移动一位,从而实现去重。 以下是使用for循环实现数组去重的示例代码: ```java public static void removeDuplicates(int[] arr) { int len = arr.length; int[] result = new int[len]; int k = 0; for (int i = 0; i < len; i++) { boolean isDuplicate = false; // 检查当前元素是否在之前的元素中重复 for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { isDuplicate = true; break; } } // 如果不重复,则将当前元素添加到结果数组中 if (!isDuplicate) { result[k++] = arr[i]; } } // 输出去重后的结果数组 for (int i = 0; i < k; i++) { System.out.print(result[i] + " "); } } public static void main(String[] args) { int[] arr = {1, 3, 2, 2, 1, 5, 6, 4, 5}; removeDuplicates(arr); } ``` 以上代码中,首先定义了一个长度和原始数组相同的结果数组result,用来存放去重后的元素。然后使用外层for循环遍历数组中的每一个元素,内层for循环用来比较当前元素和之前的元素是否有重复。如果没有重复,则将当前元素添加到结果数组中。最后,使用for循环输出去重后的结果数组。 执行以上代码,输出结果为:1 3 2 5 6 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值