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

(javascript)是否可以将不同对象类型的数组拆分为一种对象类型的多个数组,javascript,arrays,angularjs,mean,Javascript,Arrays,Angularjs,Mean,因此,我有一个数组,其中包含具有不同属性的对象,我想知道如何使用具有整个数组相同属性的对象创建多个数组 我想从这开始 [ {name:”test”, place:”country”}, {name:”walkAndEat”, Long=100,Lat:15,Location:”place name”}, {name:”test2”,place:”Europe”} ] 到 Javascript对象不是集合类型,这意味着您可以在执行期间更改它们 JavaScript是一种松

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

我想从这开始

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


Javascript对象不是集合类型,这意味着您可以在执行期间更改它们

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


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

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

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

这可以动态完成,也可以在预先存在的数组上完成,如图所示。假设您有一个具有不同属性的对象列表,例如:

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' }
];
您希望将它们分类到单独的列表中,如下所示:

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' }
];
您可以使用内置的
数组。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;
    }
});

我使用Json填充第一个数组(rest api),但我不想将大数组拆分为不同的小数组,因为每个子数组在屏幕上的位置都不同。我纠正了我的错误。请注意,您应该比我简单的
!==未定义
。最理想的对象类别检查方法是@Me.Name:创建密钥散列。