数组练习题

关于数组的练习题

1、不使用for循环,实现一个方法,传入m n两个参数,返回一个长度为m,每项为n的数组

(1)递归,使用递归也特别注意return的使用。

        function func(m, n) {
            if(typeof m !== "number" && m <= 0){
                return arr;
            }else {
                arr[arr.length] = n;
                return arguments.callee(m-1, n);
            }
        }
        console.log(func(8, 5)); [5, 5, 5, 5, 5, 5, 5, 5]

(2)类数组转数组后,调用map方法。Array.from得到是长度为m值为undefined的数组。不是空数组。

        function func(m, n) {
            var arrObj = {
                length: m
            }
            return Array.from(arrObj).map(() => n);
        }
        console.log(func(8, 5));

其实Array.from,第二个参数是一个处理函数,跟map的效果一样:

        function func(m, n) {
            var arrObj = {
                length: m
            }
            return Array.from(arrObj, () => n);
        }
        console.log(func(8, 5)); [5, 5, 5, 5, 5, 5, 5, 5]

 以下方式得到的还是空数组。调用map方法无效。

        function func(m, n) {
            var arr = [];
            arr.length = m;
            return arr.map(() => n);
        }

2、编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var result = [];
arr.toString().split(",").sort((a,b)=>a-b).map((item,index)=>{
//split的拆分使得数组的每项都是字符串类型
result.indexOf(item) == -1 ? result.push(Number(item)) : "";
});
console.log(result);  [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14]

数组的toSting会去处理数组每项及其子项,得到字符串:1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10。toSting就是拆除所有的中括号

split按逗号查分字符串:["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]。使得每项都成了字符串类型。

3、请把两个数组 ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] 和 ['A', 'B', 'C', 'D'],合并为 ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D']。

var arr1 =  ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
var arr2 = ['A', 'B', 'C', 'D'];
arr2.map((item, index) => {
    arr1.splice((index+1)*2 + index,0,item);
})
console.log(arr1); ["A1", "A2", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D"]

4、反转二维数组

原数组:

    let arr = [
      ['1', '2', '3'],
      ['a', 'b', 'c'],
    ]

(1)输出的结果:

    let arr1 = [
      ["1", "a"],
      ["2", "b"],
      ["3", "c"]
    ]

代码:二维数组创建了i个数组

    //arr二维数组  flag
    function transformArr(arr, flag) {
      let transformResult = [];
      if (flag) {
        arr.reverse();
      }
      arr.forEach((arrItem, index) => {
        arrItem.forEach((item, i) => {
          if (!Array.isArray(transformResult[i])) {
            transformResult[i] = [];
          }
          transformResult[i][index] = item;
        })
      })
      return transformResult;
    }
    let result = transformArr(arr, false);

(2)如果输出结果:输出了8个数组

[
  [ 'a', 'b', 'c' ],
  [ 'a', 'b', '3' ],
  [ 'a', '2', 'c' ],
  [ 'a', '2', '3' ],
  [ '1', 'b', 'c' ],
  [ '1', 'b', '3' ],
  [ '1', '2', 'c' ],
  [ '1', '2', '3' ]
]

代码: 

function transformArr(arr){
  let row = arr.length;
  let column = arr[0].length;
  let nums = row ** column;  //生成新数组的行数

  let newArrColumnNum = []; //每列字符连续出现的次数

  let resultArr = [];
  for(let i = 0; i < column; i++){
    newArrColumnNum[i] = row ** (column-i-1)
  }
  for(let l = 0; l < column; l++){//新数组的列循环
    for(let r = 0; r < nums; r++){//新数组的行循环
      if(!Array.isArray(resultArr[r])){
        resultArr[r] = [];
      }
      let index = Math.floor(r / newArrColumnNum[l]) % row; // 第二轮的时候,商是2,必须取原数组行数的余数
      resultArr[r][l] = arr[index][l];
    }
  }
  return resultArr;
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值