Добавьте два дублирования в сгенерированный список всех комбинаций чисел в javascript - PullRequest
0 голосов
/ 09 марта 2020

Я профинансировал функцию для создания списка всех возможных комбинаций моих значений. Я просто хочу иметь возможность дублировать первое и второе значения на третью и четвертую позиции.

function cartesian() {
    var r = [], arg = arguments, max = arg.length-1;
    function helper(arr, i) {
        for (var j=0, l=arg[i].length; j<l; j++) {
            var a = arr.slice(0); // clone arr
            a.push(arg[i][j]);
            if (i==max)
                r.push(a);
            else
                helper(a, i+1);
        }
    }
    helper([], 0);
    return r;
}

var c = cartesian([0.1,0.2], [0.1,0.2],[0.8],[0.8],[0.7]);

C is ::: [0.1,0.1,0.8,0.8,0.7], [0.1 , 0,2,0,8,0,8,0,7], [0,2,0,1,0,8,0,8,0,7], [0,2,0,2,0,8,0,8,0,7]

Я хочу преобразовать C в ::: [0.1,0.1,0.1,0.1,0.8,0.8,0.7], [0.1,0.2,0.1,0.2,0.8,0.8,0.7], [0.2,0.1,0.2,0.1,0.8,0.8,0.7], [0,2 , 0,2,0,2,0,2,0,8,0,8,0,7]

Заранее спасибо

1 Ответ

0 голосов
/ 09 марта 2020

То, что вы говорите, эквивалентно перемещению первой / второй 2 позиции назад и копированию и pu sh в начало массива. Таким образом, вы можете просто использовать slice(begin, end) или добавить их в начало массива, как показано здесь.

const data = [0.1,0.2,0.8,0.8,0.7];

const mapped = [...data.slice(0,2),...data]; // OR [data[0], data[1], ...data];

console.log(mapped);

// Usage
const c = cartesian([0.1,0.2], [0.1,0.2],[0.8],[0.8],[0.7]).map((arr)=> [arr[0], arr[1], ...arr]);

// Or this
const c = cartesian([0.1,0.2], [0.1,0.2],[0.8],[0.8],[0.7]).map((arr)=> [...arr.slice(0,2), ...arr]);
...