所以我有一个包含不同属性的对象的数组,我想知道如何使用整个数组具有相同属性的对象创建多个数组。
我想离开这个
performSegueWithIdentifier("segueIdentifier", sender: nil)
要
[
{name:”test”, place:”country”},
{name:”walkAndEat”, Long=100,Lat:15,Location:”place name”},
{name:”test2”,place:”Europe”}
]
答案 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];
有效...如果循环源数组并填充它,则可以为每个对象定义任何行为