首页 > 解决方案 > 声明和运营商问题

问题描述

嘿伙计们,我怎样才能重新排序运算符的声明,以便在记录时结果为 0?

numbers = [23, 12, 71, 10]
operators = [
(a, b) => a + b,
(a, b) => a / b,
(a, b) => a * b,
(a, b) => a - b
];
var result = 1;
operators.forEach(function(op) {
result = Math.floor(op(result, numbers[operators.indexOf(op)]))
});
console.log(result);

我到了一半,但有些东西没有点击?

干杯

标签: javascriptreactjs

解决方案


看起来这行得通!

numbers = [23, 12, 71, 10]
operators = [
  (a, b) => a + b,
  (a, b) => a - b,
  (a, b) => a / b,
  (a, b) => a * b
];

result = 1;
operators.forEach(function(op) {
result = Math.floor(op(result, numbers[operators.indexOf(op)]))
});
console.log(result);

我强制这个顺序找到它 - 虽然result不等于 0,但 shuffle operators,设置result回 1,然后forEach一遍又一遍地运行,直到 result = 0。这是执行此操作的代码:

// From https://www.w3docs.com/snippets/javascript/how-to-randomize-shuffle-a-javascript-array.html
function shuffleArray(array) {
  let curId = array.length;
  // There remain elements to shuffle
  while (0 !== curId) {
    // Pick a remaining element
    let randId = Math.floor(Math.random() * curId);
    curId -= 1;
    // Swap it with the current element.
    let tmp = array[curId];
    array[curId] = array[randId];
    array[randId] = tmp;
  }
  return array;
}

numbers = [23, 12, 71, 10]
operators = [
  (a, b) => a + b,
  (a, b) => a - b,
  (a, b) => a / b,
  (a, b) => a * b
];

let result = 1;

while (result != 0) {
  result = 1;
  operators = shuffleArray(operators);
  operators.forEach(function(op) {
    result = Math.floor(op(result, numbers[operators.indexOf(op)]))
  });
  console.log(result);
}

console.log(operators);


推荐阅读