繁体   English   中英

对嵌套对象的javascript数组进行排序

[英]Sorting javascript array of nested objects

我是JavaScript的新手,正在尝试学习尽可能多的知识,但感到自己在尝试做的事情时遇到了麻烦。

我的问题是,我在每个对象内都有一个对象数组,是一个商店对象,这是一种具有维修成本属性的“类型”维修对象。

如何按价格排序? 请到目前为止查看我的代码。 我需要按价格顺序返回商店对象,因为我仍然需要商店的所有信息,但是根据所做出的选择按照维修价格的顺序排列,因此基本上按选择的顺序以阵列的形式返回商店对象。 我可能不知道,不可能有任何想法。 我预先感谢您的宝贵时间。

 var vendors = [ { mosShop: { samsung: { screen: 50, button: 10, back: 20 }, iphone: { screen: 10, button: 18, back: 1 } } }, { davesShop: { samsung: { screen: 40, button: 5, back: 12 }, iphone: { screen: 18, button: 148, back: 11 } } } ]; var arr = []; //; $('#phone,#repair').change(function() { var selectedPhone = $('#phone :selected').text().toString(); var selectRepair = $('#repair :selected').text().toString(); for (var i = 0; i < vendors.length; i++) { var mo = Object.keys(vendors[i]); var t = mo.toString() var price = vendors[i][t][selectedPhone][selectRepair]; alert(price) } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> <select id="phone"> <option value="samsung">samsung</option> <option value="iphone">iphone</option> <option value="mercedes">blah</option> <option value="audi">blah</option> </select> <select id="repair"> <option value="screen">screen</option> <option value="button">button</option> <option value="back">back</option> <option value="audi">blah</option> </select> <div id="endresults"> </div> 

`

为了使数组根据selectedPhoneselectRepair的值排序,可以使用本机sort()函数,如下所示:

function shopPrices(selectedPhone, selectedRepair) {
    return vendors.sort(function(a,b) { 
        var shopA = Object.keys(a)[0];
        var shopB = Object.keys(b)[0];
        return (a[shopA][selectedPhone][selectedRepair] - b[shopB][selectedPhone][selectedRepair]);
    });
} 

然后,您可以简单地通过传递selectedPhoneselectedRepair值来调用该函数,如下所示:

var sorted = shopPrices('samsung','screen');
//Result -> [{"davesShop":{"samsung":{"screen":40,"button":5,"back":12},"iphone":{"screen":18,"button":148,"back":11}}},{"mosShop":{"samsung":{"screen":50,"button":10,"back":20},"iphone":{"screen":10,"button":18,"back":1}}}]

var anotherTest = shopPrices('iphone','screen');
//Result -> [{"mosShop":{"samsung":{"screen":50,"button":10,"back":20},"iphone":{"screen":10,"button":18,"back":1}}},{"davesShop":{"samsung":{"screen":40,"button":5,"back":12},"iphone":{"screen":18,"button":148,"back":11}}}]

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM