jirengu / frontend-interview

前端笔试面试题题库
1.29k stars 139 forks source link

两个js数组相关题目 #40

Open wintercomming opened 6 years ago

wintercomming commented 6 years ago

来自xx公司面试题 1.如何随机打乱一个js数组(使用原生代码) 2.现在有一个二维数组,数组长度和子数组长度均不可知,问:从每一个子数组里面取一个数成一个数组,要求组合不能重复,问一共有多少个组合,请设计一个函数把所有可能出现的组合以数组的形式输出。 (由于解题时间花费比较长,代码也有一点小失误,很遗憾没有通过,表示自己的代码很捞,希望看到这两个问题的的同学能想出比较实用且高大上的想法一起讨论)

Caijialinxx commented 6 years ago
Caijialinxx commented 6 years ago

这个方法的适用范围为:二维数组中子数组的每个元素都是数字、重新组合不考虑前后顺序。 如果子数组中可以有字符串,那么 removeSame() 可能不适用。因为若其中一个子数组为 [1, '1'] ,hash[1]hash['1'] 会被认为相同。

function reCombine(array) {
  if (array.length > 1) {
    let recombinedArray = []
    for(let i = 0; i < array[0].length; i++) {
      for(let j = 0; j < array[1].length; j++) {
        recombinedArray.push([].concat(array[0][i], array[1][j]))
      }
    }
    recombinedArray = removeSame(recombinedArray)
    array.splice(0, 2, recombinedArray)
    reCombine(array)
  }
  return array[0]
}

function removeSame(array) {
  let newArray = [], hash = {}
  for (let i = 0; i < array.length; i++) {
    if (!hash[array[i]]) {
      hash[array[i]] = true
      newArray.push(array[i])
    }
  }
  return newArray
}

JSBin在线演示

liyuanqiu commented 5 years ago

随机打乱数组:

function obfs(arr) {
  return arr.slice().reduce(acc => [...acc, ...arr.splice(parseInt(Math.random() * arr.length, 10), 1)], []);
}

console.log(obfs([1, 2, 3, 4, 5]));
menglala commented 5 years ago

随机打乱数组:

function shuffle(arr) {
  arr.sort(() => {
    return Math.random() - 0.5
  })
}
Cool-Star commented 5 years ago
function disorder(arry) {
  return arry.sort(function(a,b) {
     return Math.random() - Math.random();
  })
}
HECHONG999 commented 4 years ago

function disorder(arry) { return arry.sort(function(a,b) { return Math.random() - 0.5; }) }

coolseaman commented 3 years ago
const combine = (arr) => {

    let arr1 = [[]],
        arr2 = [];

    for(list of arr) {
        let l = new Set(list);
        for(n of l) {
            for(a of arr1) {
                arr2.push([...a, n]);
            }
        }    
        arr1 = arr2;
        arr2 = [];    
    }

    return arr1;
}