簡體   English   中英

對任意對象數組進行排序

[英]ranking arbitrary array of objects

如果我有這樣的數組

var cars=
[
      { 'title':'brand', 'value':'honda'}
      { 'title':'brand', 'value':'toyota'}
      { 'title':'color', 'value':'red'}
      { 'title':'color', 'value':'white'}
      { 'title':'year', 'value':'1995'}
      { 'title':'year', 'value':'2006'}
      { 'title':'year', 'value':'2007'}     
 ]

我如何編寫一個可以返回元素等級的函數。 因此,對於此數組,對於標題為“ brand”的元素,它應該返回0,對於標題為“ color”的元素,它應該返回1,依此類推。 它不應緩存或使用任何映射表,但應確定飛行等級,因此您可以隨時調用

getRank(cars[6]) == 2 //true for the last element 
getRank(cars[0]) == 0 //true for the first element 
getRank(cars[1]) == 0 //true for the second element 
getRank(cars[3]) == 1 //true for the fourth element 

根據您的進一步解釋更新了答案

Java腳本

var cars = [
      { 'title':'brand', 'value':'honda'},
      { 'title':'brand', 'value':'toyota'},
      { 'title':'color', 'value':'red'},
      { 'title':'color', 'value':'white'},
      { 'title':'year', 'value':'1995'},
      { 'title':'year', 'value':'2006'},
      { 'title':'year', 'value':'2007'}     
 ];

function getRank(data, number) {
    var ranks = {},
        rank = 0;

    data.forEach(function (entry) {
        if (typeof ranks[entry.title] !== "number") {
            ranks[entry.title] = rank;
            rank += 1;
        }
    });

    return ranks[data[number].title];
}


console.log(getRank(cars, 6));
console.log(getRank(cars, 0));
console.log(getRank(cars, 1));
console.log(getRank(cars, 3));

jsfiddle上

輸出量

2
0
0
1

如果已經訂購(必須是原因,否則我真的不會理解您的問題),您可以執行以下操作

var current_index = -1;
var current_title = "";

for (var i in arr) {
    if (arr[i].title!=current_title) {
        current_title = arr[i].title;
        current_index++;
    }
    arr[i].rank = current_index;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM