在下面的代码中,我有一个数组,其中包含每个包含另一个对象的对象。我想做一个for循环,它针对最里面对象中的一个元素。
var myArray = [
{nemo : {type: "fish", scales: "yes"}},
{bubbles : {type: "fish", scales: "yes"}},
{jimmy : {type: "turtle", scales: "no"}}
];
function findType (array, animalType) {
var newArray = [];
for (i = 0; i < array.length; i ++){
if (array[i][*what goes here?*].type == animalType){
newArray.push(array[i]);
}
}
return newArray;
}
findType(myArray, "fish");
我遇到的问题是要达到我想要的水平(即nemo,bubbles)的水平,需要在for循环的每个循环中知道,这些名称各不相同时间。什么方法可以通过这个级别进入我想要的对象?谢谢。
答案 0 :(得分:2)
我建议稍微重构一下代码,以及你的对象。相反,使名称指向一个对象,例如, {nemo : {type: "fish", scales: "yes"}}
,将名称作为属性。因此,将其更改为:{name: "nemo", type: "fish", scales: "yes"}
这不仅可以更轻松地访问每个媒体资源,还可以让您的代码更加清晰。
这样,您的代码就变成了:
var myArray = [{name: "nemo",type: "fish", scales: "yes"},
{name: "bubbles",type: "fish", scales: "yes"},
{name: "jimmy",type: "turtle", scales: "no"}];
function findType (array, animalType) {
var newArray = [];
for (i = 0; i < array.length; i ++){
if (array[i].type == animalType){
newArray.push(array[i]);
}
return newArray;
}
findType(myArray, "fish");
如果你不能对鱼类物体进行重组,其他人就提供了解决问题的答案,而无需重组对象。
答案 1 :(得分:2)
您可以使用Object.keys()
获取对象属性的列表https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
在您的情况下,您可以:
if (array[i][Object.keys(array[i])[0]].type == animalType){
//you can see it like this for the first fish :
//array[i] ---> {nemo : {type: "fish", scales: "yes"}}
//Object.keys(array[i]) ---> ["nemo"]
//array[i]["nemo"] ---> {type: "fish", scales: "yes"}
但我同意其他人可能会考虑更改您的数据结构。
答案 2 :(得分:0)
您可以使用for ... in
遍历对象键值,然后检查hasOwnProperty以确保其定义的键值。
然后,对于每个人,您可以检查类型。
function findType (array, animalType) {
var newArray = [];
for (i = 0; i < array.length; i ++){
for (var key in array[i]) {
if( array[i].hasOwnProperty(key) ) {
if(array[i][key].type === animalType) {
newArray.push(array[i]);
}
}
}
}
return newArray;
}
这是工作jsfiddle:https://jsfiddle.net/9kt64d21/
答案 3 :(得分:0)
尝试使用双循环
var myArray = [{nemo : {type: "fish", scales: "yes"}},
{bubbles : {type: "fish", scales: "yes"}},
{jimmy : {type: "turtle", scales: "no"}}];
function findType (array, animalType) {
var newArray = [];
for (i = 0; i < array.length; i ++){
for(var name in array[i]){
if(array[i][name].type == animalType){
newArray.push(array[i]);
}
}
}
return newArray;
};
console.log(findType(myArray, "fish"));
答案 4 :(得分:0)
使用for <key> in <object>
:
var myArray = [{nemo : {type: "fish", scales: "yes"}},
{bubbles : {type: "fish", scales: "yes"}},
{jimmy : {type: "turtle", scales: "no"}}];
function findType (array, animalType) {
var newArray = [];
for (i = 0; i < array.length; i ++){
var animal = array[i];
for (var key in animal) {
var description = animal[key];
if( description.type == animalType ) {
console.log("" + key + " is a " + animalType);
newArray.push(array[i]);
}
}
}
return newArray;
}
var fish = findType(myArray, "fish");
console.log("" + fish.length + " fish found.");
&#13;