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

标签 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 或其他函数可以挽救我的生命,有人可以在这一点上启发我吗?

我希望我说清楚了。

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

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

例如 报名费:200.00 结果:[100.00, 100.00]

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

最佳答案

如果您想遍历一个数组并在此过程中构建一个对象(或任何其他对象),那么 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);

关于javascript - 在处理来自另一个数组的值后将值存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708184/

相关文章:

javascript - 为什么除了 1 条路由之外的所有路由都与 Backbone 路由器一起使用

javascript - 如何使用 Javascript 将动态生成的按钮拆分为列?

c - 如何在 C 中访问数组中的特定结构?

javascript - 是否可以使用 Yup 直接验证 ES6 集?

javascript - 在 React 组件中使用 ES6 分配属性

javascript - 使用 async/await 组合并发和顺序请求

javascript - 生成最多 50 个随机数。让用户使用 JavaScript 猜测最多 5 倍的随机数

javascript - 你还在对不支持JavaScript的浏览器隐藏吗?

javascript - AppendChild TypeError 即使 Child 是 HTML

c - 使用指针对c中的字符串数组进行排序