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

(javascript) Is it possible to split an array of different object types into multiple arrays of one object type

本文关键字:类型 数组 拆分 一个对象 对象 一个 是否 javascript      更新时间:2023-09-26

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

我想离开这个

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

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

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

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 中所示

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

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

Javascript对象不是集合类型,它们是动态的,这意味着您可以在执行过程中更改它们。

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

var anything = arrayOfAnyOtherType[0]; 

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