2016-03-26 2 views
0

У меня есть следующий файл json. Моя цель - правильно найти все name и добавить его значение для имени массива.Найдите конкретное свойство, затем нажмите на массив

var data = { 
    "Fruits": [{ 
    "name": "apple", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "orange", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "strawberry", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "banana", 
    "added_date": "", 
    "expired_date": "" 
    }], 
    "Meat": [{ 
    "name": "beef", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "chicken", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "fish", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "pork", 
    "added_date": "", 
    "expired_date": "" 
    }], 
    "Vegetable": [{ 
    "name": "cucumber", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "kale", 
    "added_date": "", 
    "expired_date": "" 
    }], 
    "Spice": [{ 
    "name": "cajun", 
    "added_date": "", 
    "expired_date": "" 
    }, { 
    "name": "garlic", 
    "added_date": "", 
    "expired_date": "" 
    }] 
}; 

я придумал что-то вроде этого, но дайте мне ошибку на push функции. Есть ли лучший способ решить эту проблему?

var name = []; 
for (var key in data) { 
    for (var i = 0; i < data[key].length; i++) { 
    console.log(data[key][i].name); 
    name.push(data[key][i].name); 
    } 
} 
console.log(name); 
+0

что является ошибка? – csum

ответ

5

Проблема это имя переменной name, так как в глобальном масштабе, который вы пытаетесь переопределить window.name свойство, которое принимает только строку значения

var data = { 
 
    "Fruits": [{ 
 
    "name": "apple", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "orange", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "strawberry", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "banana", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }], 
 
    "Meat": [{ 
 
    "name": "beef", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "chicken", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "fish", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "pork", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }], 
 
    "Vegetable": [{ 
 
    "name": "cucumber", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "kale", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }], 
 
    "Spice": [{ 
 
    "name": "cajun", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }, { 
 
    "name": "garlic", 
 
    "added_date": "", 
 
    "expired_date": "" 
 
    }] 
 
}; 
 

 
var name = []; 
 
snippet.log('name value:' + name + ':' + typeof name + ':') 
 

 
var names = []; 
 
for (var key in data) { 
 
    for (var i = 0; i < data[key].length; i++) { 
 
    names.push(data[key][i].name); 
 
    } 
 
} 
 
snippet.log(names);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Это, конечно, правильно, но реальный вопрос в том, почему OP написала код, который работает в глобальном контексте, где 'name' уже определен со специальным значением, вместо того, чтобы просто писать это в функции, которая будет работать хорошо. –

Смежные вопросы