Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 继续分割数组,直到每个项都是1_Javascript - Fatal编程技术网

Javascript 继续分割数组,直到每个项都是1

Javascript 继续分割数组,直到每个项都是1,javascript,Javascript,我想用这个myArr[2,3,5,7]划分一个给定的数组cm(arr),并将这些值存储在另一个数组(finalArr)中,我想继续迭代,直到newArr项为1 function cm(arr){ let divide = [2,3,5,7]; let finalArr = []; let newArr = arr.map(function(e){ for(let i = 0; i < divide.length; i++){ if(parseInt(e/d

我想用这个myArr[2,3,5,7]划分一个给定的数组cm(arr),并将这些值存储在另一个数组(finalArr)中,我想继续迭代,直到newArr项为1

function cm(arr){

  let divide = [2,3,5,7];
  let finalArr = [];

 let newArr = arr.map(function(e){
    for(let i = 0; i < divide.length; i++){
      if(parseInt(e/divide[i]) === e/divide[i]){
        finalArr.push(divide[i])
        return e/divide[i]; 
      }   
    } 
  });

 let newFinal = new Set(finalArr)
  console.log([...newFinal])
  console.log(newArr)
  
}

您可以进行一个循环,检查数组是否包含所有的元素。这种方法适用于具有最多10个循环的无限循环的回退

函数cm(数组){
常数除法=[2,3,5,7];
设i=10;
而(i--&&!array.every(v=>v==1)){
常数因子=[];
array=array.map(v=>{
常数d=divide.find(d=>!(v%d));
如果(d==未定义)返回v;
如果(!factors.包括(d))factors.push(d);
返回v/d;
});
console.log('factors',…factors)
console.log('值',…数组)
}
}

厘米([2,3,4,5,6])
如果所需的输出都是1s,那么为什么不立即输出呢?因为我想将最终数组中的所有数字相乘,以获得第一个数组cm(arr)的公倍数,这可能是问题中的一个基本信息:您想要得到公倍数。请注意,这是一个已经写了很多次的算法。你可以很容易地找到它。我实际上想创建我自己的解决方案,所以我没有搜索实际的答案,而是想实现我脑海中的想法,但我认为我的方法并不总是一个好方法,因为这不会在更大的数量上起作用。非常感谢你,我可以将因子推到一个新的数组中,并得到公共倍数
cm([2,3,4,5,6])

[ 2, 3, 5 ] // the number that we divided each arr[item] with
[ 1, 1, 2, 1, 3 ] // the output of arr[item]/divide[item]


//desired output 

[2,3,5,2,3] // keep dividing arr[item] with divide[item] until the second array had all items = 1
[1,1,1,1,1]
function cm(arr) {
    let divide = [2, 3, 5, 7];
    return arr.map((item, i) => {
        let newItem = item;
        let divideItem = i in divide ? divide[i] : newItem;
        while (newItem > 1) {
            newItem /= divideItem;
            //one step for division
        }
        newItem = Math.ceil(newItem);
        return newItem;
    });
}