(javascript)是否可以将不同对象类型的数组拆分为一个对象类型的多个数组

时间:2015-11-10 10:25:49

标签: javascript arrays angularjs mean

所以我有一个包含不同属性的对象的数组,我想知道如何使用整个数组具有相同属性的对象创建多个数组。

我想离开这个

performSegueWithIdentifier("segueIdentifier", sender: nil)

[
    {name:”test”, place:”country”},
    {name:”walkAndEat”, Long=100,Lat:15,Location:”place name”},
    {name:”test2”,place:”Europe”}
]

3 个答案:

答案 0 :(得分:2)

如果您看到对象具有相同的属性,则可以将键保存为集合对象中的(字符串化)索引,并检查属性键是否已存在:

var arrcoll = {};
function add(o){
    var keys = JSON.stringify(Object.keys(o).sort());
    var arr = arrcoll[keys];
    if(arr)
        arr.push(o);
    else
        arrcoll[keys] = [o];
    return arr;
}

这可以动态完成,也可以在现有阵列上完成,如Fiddle

所示

答案 1 :(得分:1)

假设您有一个具有不同属性的对象列表,如下所示:

var placesOrPeople = [
    { name: 'Seymour Skinner', occupation: 'Principal' },
    { name: 'Kwik-E-Mart', lat: 23, long: 100 },
    { name: 'Sideshow Bob', occupation: 'Comic Foil' },
    { name: 'Flaming Tyre Yard', lat: 12, long: 88 },
    { name: 'Joe Quimby', occupation: 'Mayor' }
];

并且您希望它们按如下方式分类到单独的列表中:

places = [
    { name: 'Kwik-E-Mart', lat: 23, long: 100 },
    { name: 'Flaming Tyre Yard', lat: 12, long: 88 }
];

people = [
    { name: 'Seymour Skinner', occupation: 'Principal' },
    { name: 'Sideshow Bob', occupation: 'Comic Foil' },
    { name: 'Joe Quimby', occupation: 'Mayor' }
];

您可以使用内置的Array.filter命令,如下所示:

var places = placesOrPeople.filter(function(currentPlaceOrPerson) {
    if (currentPlaceOrPerson.occupation !== undefined) {
        // it must be a person, since locations don't have occupations
        return true;
    } else {
        return false;
    }
});

var people = placesOrPeople.filter(function(currentPlaceOrPerson) {
    if (currentPlaceOrPerson.lat !== undefined && currentPlaceOrPerson.long !== undefined) {
        // it must be a place, since people don't have co-ordinates
        return true;
    } else {
        return false;
    }
});

答案 2 :(得分:0)

Javascript对象不是设置类型they are dynamic,这意味着您可以在执行期间更改它们。

  

JavaScript是一种松散类型或动态语言。这意味着您不必提前声明变量的类型。在处理程序时将自动确定类型。这也意味着你可以拥有与不同类型相同的变量:

var anything = arrayOfAnyOtherType[0]; 

有效...如果循环源数组并填充它,则可以为每个对象定义任何行为