在处理来自另一个数组的值之后,将值存储在数组中

时间:2017-01-17 22:29:57

标签: javascript arrays ecmascript-6

我遇到了一个我要处理给定值并检查此值是否大于我的值数组的问题,如果是,请使用我的数组合并输出。

例如。

我的数组总是:

const ArrayPrimitive = [100,50,20,10];

例如输入中的给定值:

  • 参赛作品:30.00结果:[20.00,10.00]
  • 参赛作品:80.00结果:[50.00,20.00,10.00]
  • 条目:125.00结果:抛出NoteUnavailableException
  • 条目:-130.00结果:抛出InvalidArgumentException
  • 条目:NULL结果:[空集]

我已经开始发展,但在检查价值是否有效后,我仍然坚持如何处理剩下的事情。

const ArrayPrimitive = [100,50,20,10];
var combination = [];
$(document).ready(function(){
  $(".btn-submit").on("click",function(){
    var amountOfMoney = document.getElementById('amountOfMoney').value;
    for(let i=0; i=ArrayPrimitive.length;i++){
      if(amountOfMoney=ArrayPrimitive[i]){
        combination.push(amountOfMoney);
      }
      while(amountOfMoney > ArrayPrimitive[i]){
        var k = amountOfMoney/ArrayPrimitive[i];
        for(let j=0; j = k; j++){
          combination.push(ArrayPrimitive[i]);
          amountOfMoney = amountOfMoney - ArrayPrimitive[i];
        }
        var rest = n % ArrayPrimitive[i];
      }
    }
  });
});

我的主要问题是:

  1. 你能帮助我以旧方式解决这个问题吗?
  2. 我即将学习ES6,可能.map或其他功能可以挽救我的生命,有人可以在这一点上启发我吗?
  3. 我希望我能说清楚。

    https://jsfiddle.net/v748ha08/1/

    更新:感谢@Malk的回答,但只有当您不必合并子集的多个值时,您的解决方案才能提供正确的答案。

    e.g。 参赛作品:200.00 结果:[100.00,100.00]

    在这种情况下,我的子集中需要2个值为100,当我测试它时,它们的函数会抛出错误。

1 个答案:

答案 0 :(得分:2)

如果你想在整个过程中迭代一个数组并建立一个对象(或其他任何东西),那么Array.reduce()就是你要走的路。



const ArrayPrimitive = [100, 95, 20, 10]; // Assuming presorted array(descending)

function findChange(m) {
  return ArrayPrimitive.reduce((mm, c) => {
    if (mm.rest >= c) {
      mm.change.push(c);
      mm.rest -= c
    }
    return mm
  }, {
    change: [],
    rest: m
  });
}

function findChangeOld(m) {
  var retval = {
      change: [],
      rest: m
    },
    i = ArrayPrimitive.length;

  for (var x = 0; x < i; x++) {
    if (retval.rest >= ArrayPrimitive[x]) {
      retval.change.push(ArrayPrimitive[x])
      retval.rest -= ArrayPrimitive[x];
    }
  }
  return retval;
}

function calcChange(v) {
  var c = findChangeOld(v);

  if (v < 0 || isNaN(v)) {
    console.log(`${v}: throw InvalidArgumentException`);
    return;
  }

  if (c.rest > 0)
    console.log(`${v}: throw NoteUnavailableException`);
  else
    console.log(`${v}: ${c.change}`);
}

calcChange(30);
calcChange(80);
calcChange(105);
calcChange(125);
calcChange(-130);
calcChange(null);
&#13;
&#13;
&#13;