按值排序JS对象

时间:2015-02-04 12:47:04

标签: javascript jquery

我有以下JavaScript对象:

{
    date  : 'some date',
    name  : 'some name'
}

我有10个这样的对象,其中一半对name - tableA有一个值。而另一半的name - tableB会有不同的值。

我想将这些对象分解为不同的表格,具体取决于name的值,我不知道我的对象的name值。 < / p>

因此对于tableA表中的5个对象:

tableA
---------------
date  : 'some date'
date  : 'some date'
date  : 'some date'
date  : 'some date'
date  : 'some date'

和tableB

tableB
---------------
date  : 'some date'
date  : 'some date'
date  : 'some date'
date  : 'some date'
date  : 'some date'

我将使用jQuery来渲染所有这些。我假设我需要像

这样的东西
  jQuery.each(objects, function(index, object) {
      //build my table
  }

我只是不确定完成我想要的逻辑。不是构建我的HTML的实际代码,而是将我的对象分成不同组的逻辑所需的逻辑。我希望这是有道理的。

非常感谢任何建议或建议。

4 个答案:

答案 0 :(得分:1)

var data = [{"date":"some date", "name":"tableA"},
            {"date":"some date", "name":"tableB"},
            {"date":"some date", "name":"tableA"},
            {"date":"some data", "name":"tableB"},
            {"date":"some data", "name":"tableC"},
            {"date":"some data", "name":"tableC"},
            {"date":"some data", "name":"Whatever"}];

var table = {};
$.each(data,function(index_data,obj_data){
    if(typeof table[obj_data.name] == 'undefined'){//there's the name in obj already?
        table[obj_data.name] = [{"date":obj_data.date,"name":obj_data.name}];//if no,then create an array and add the obj 
    }else{
        table[obj_data.name].push({"date":obj_data.date,"name":obj_data.name});//if yes add the obj to array
    }
});

这是示例jsfiddle

它将创建table对象的属性,该属性是name对象的data属性,并添加名称属性为data对象的对象数组与table对象

的名称属性相同 如果你不理解,请随时问我。)

答案 1 :(得分:0)

您可以使用JavaScript的精彩功能 - 过滤器

例如,让我们想象你有多个对象:

var data = [{"date":"date1", "name":"tableA"},
            {"date":"date2", "name":"tableB"},
            {"date":"date3", "name":"tableA"},
            {"date":"date4", "name":"tableB"}];

您可以描述两个功能。 像:

function all_A(el) {
    if(el.name == 'tableA') {
        return true;
    }
}

function all_B(el) {
    if(el.name == 'tableB') {
        return true;
    }
}
如果元素的name属性为&#34; TableA&#34;,

函数 all_A 将为每个元素返回true。类似于 all_B

然后您只需要在数据阵列上运行过滤器功能。 像那样:

var table_A = data.filter(all_A);
var table_b = data.filter(all_B);

以下是工作示例:) - http://jsfiddle.net/32a97n1b/

答案 2 :(得分:0)

尝试使用以下代码。它将为您提供json对象中的键。

for (data in objArray){
  console.log(data);
}

此外,您可以根据您的密钥访问单个元素并过滤它们

答案 3 :(得分:0)

因此,您希望通过&#34; name&#34;将数据分组到单独的列表中。柱:

function group(column){
    return function(p,c){
        if (!p[c[column]]){
            p[c[column]] = [];
        }
        p[c[column]].push(c);
        return p
    }
}

data.reduce(group("name"),{});