在JSON中找到最小的子项

Ara*_*han 1 html javascript json

考虑像这样的JSON

{
    "products": {
        "c1": {
            "stock": 100
        },
        "c2": {
            "stock": 200
        },
        "c3": {
            "stock": 300
        },
        "c4": {
            "stock": 400
        },
        "c5": {
            "stock": 500
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了找到最少的库存,我写了这样的代码

 var minStock=Math.min(
      products.c1.stock,
      products.c2.stock,
      products.c3.stock,
      products.c4.stock,
      products.c5.stock
      )
  console.log(minStock);
Run Code Online (Sandbox Code Playgroud)

现在我想知道基于库存值的c1,c2,c3,c4或c5是最小的,在这种情况下说

console.log("c1 is minimum with stock 100");
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

这是一个解决方案Array#reduce().它也返回相同的引用:

var object = { "products": { "c1": { "stock": 200 }, "c2": { "stock": 200 }, "c3": { "stock": 300 }, "c4": { "stock": 400 }, "c5": { "stock": 500 } } },
    result = function (o) {
        var keys = Object.keys(o);
        return keys.reduce(function (r, k) {
            if (o[k].stock < o[r[0]].stock) {
                return [k];
            }
            if (o[k].stock === o[r[0]].stock) {
                r.push(k);
            }
            return r;
        }, [keys.shift()]);
    }(object.products);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
document.write(result.join(', ') + ' ' + (result.length === 1 ? 'is' : 'are') + ' minimum with stock à '+ object.products[result[0]].stock);
Run Code Online (Sandbox Code Playgroud)