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

标签 javascript jquery arrays sorting object

我是 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}}}]

希望这有帮助!

关于javascript - 对嵌套对象的 javascript 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36020977/

相关文章:

jquery - 使用 jQuery 和 Ajax.BeginForm 将 div 与 "Loading..."spinner.gif 居中

javascript - 使用图像而不是未打开的 <select>?

php - 如何获取数组的所有唯一组合,包括空白(项目顺序不相关)

python - 在 Python 中,我如何制作一个 numpy 矩阵列的副本,以便对副本的任何进一步操作都不会影响原始矩阵?

javascript - 如果具有特定类的 div 具有 iframe,则将另一个类添加到 div

javascript - 关注有值的输入域

javascript - 获取 Google Static Maps API 的西南 Angular 和东北 Angular

javascript - 如何动态地创建/输入一个项目作为无序列表中另一个项目的子列表项目?

jquery - Bootstrap使用Jquery和ajax切换切换功能

java - 渲染图 block Java Libgdx