2016-03-15 5 views
-1

Я новичок в javaScript и стараюсь как можно больше узнать, но чувствую, что я ударил кирпичную стену тем, что я пытаюсь сделать. . Моя проблема. У меня есть массив объектов внутри каждого объекта - это объект магазина в этом типе объекта ремонта с стоимостью ремонта. Как я могу сортировать это по цене. см. мой код. Мне нужно вернуть объект магазина в ценовом заказе, потому что мне все еще нужна вся информация магазина, но в порядке цены ремонта в зависимости от выбранного выбора, поэтому в основном возвращаем объект магазина в массив в порядке выбора. Возможно, это невозможно. Я не знаю, какие идеи были бы оценены. Я заранее благодарю Вас за time`Сортировка массива 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>

`

+0

, пожалуйста, укажите, как должен выглядеть массив результатов. –

+4

Вы искали? ['[javascript] sort array objects inested property'] (https://stackoverflow.com/search?q=%5Bjavascript%5D+sort+array+objects+nested+property) --- один из них должен быть полезным. –

+0

Как и в моем коде, но в порядке выбранного ремонта - минимальная стоимость, поэтому, если davesShop ниже, он должен появиться первым в отсортированном массиве объектов. –

ответ

4

Чтобы получить массив, отсортированный по значению selectedPhone и selectRepair, вы можете использовать родной 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]); 
    }); 
} 

Тогда вы можете просто вызвать функцию by pas петь значения selectedPhone и selectedRepair как следующий образом-

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

Надеется, что это помогает!

+0

Удивительно большое вам спасибо за вашу помощь и время, это то, что я искал. p.s Отсутствует закрывающая фигурная скобка. –

+2

'Object.keys (a) .toString()' должен быть 'Object.keys (a) [0]'. Вызов 'toString()' в массиве и использование результата в качестве имени свойства является ошибочным. –

Смежные вопросы