【问题标题】:How to get highest difference between two numbers in a JSON object如何获得 JSON 对象中两个数字之间的最大差异
【发布时间】:2019-07-17 19:31:53
【问题描述】:

我正在使用 NodeJS 在网站上创建一个“特色产品”小部件。我有一个带有SKUpricesale_price 的JSON 对象。获得最高折扣商品的SKU 的最佳方式是什么(price 和 sale_price 之间的差异)?

我尝试通过循环遍历项目并找到 price 和 sale_price 之间的差异,将结果推送到数组然后获取最大值,但此时我无法获取 SKU。

我拥有的 JSON 对象示例:

{ "item_number":12341231, "price":"250", "sale_price":"219.99"},
{ "item_number":12341232, "price":"210", "sale_price":"209.99"},
{ "item_number":12341233, "price":"20", "sale_price":"12.99"},
{ "item_number":12341234, "price":"150", "sale_price":"19.99"},
{ "item_number":12341235, "price":"60", "sale_price":"29.99"},
{ "item_number":12341236, "price":"10", "sale_price":"5.99"}
];

例如,程序将返回 1231234 作为特色商品的 SKU,因为折扣约为 130 美元。

我只想要一个快速的解决方案,不用担心性能。

【问题讨论】:

  • 所以循环并减去跟踪最大差异。

标签: javascript arrays node.js json


【解决方案1】:

你可以用一个循环来减少数组,并取一个具有最大增量的数组。

var array = [{ item_number: 12341231, price: "250", sale_price: "219.99" }, { item_number: 12341232, price: "210", sale_price: "209.99" }, { item_number: 12341233, price: "20", sale_price: "12.99" }, { item_number: 12341234, price: "150", sale_price: "19.99" }, { item_number: 12341235, price: "60", sale_price: "29.99" }, { item_number: 12341236, price: "10", sale_price: "5.99" }],
    result = array.reduce((a, b) =>
        a.price - a.sale_price > b.price - b.sale_price ? a : b);

console.log(result);

【讨论】:

    【解决方案2】:

    如果性能不是问题,您可以按降序对产品进行排序,并从排序结果中获取第一个:

    const data = [
      { "item_number":12341231, "price":"250", "sale_price":"219.99"},
      { "item_number":12341232, "price":"210", "sale_price":"209.99"},
      { "item_number":12341233, "price":"20", "sale_price":"12.99"},
      { "item_number":12341234, "price":"150", "sale_price":"19.99"},
      { "item_number":12341235, "price":"60", "sale_price":"29.99"},
      { "item_number":12341236, "price":"10", "sale_price":"5.99"}
    ];
    
    const maxDiffProduct = data.sort((a, b) => (b.price - b.sale_price) - (a.price - a.sale_price))[0];
    console.log(maxDiffProduct.item_number);

    【讨论】:

    • 没有理由对它进行真正的排序。只需对其进行一次迭代就足够了。这行得通,但有更好的方法。
    • @epascarello 你是对的。尽管有了这个,如果您愿意,您可以获得超过 1 个特色产品。
    • @slider 我同意你的看法,实际上我正在考虑抽取最好的 5 个,如果需要,以后再使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    相关资源
    最近更新 更多