我一直在寻找一个简单的方法来循环一个数组(我没有使用过很多javascript),我似乎无法理解我见过的例子。
我还想从数组中检索数据......
以下示例我可以理解:https://www.w3schools.com/js/js_loop_for.asp
但它对我想要的用例没用。
假设我有一个如下所示的数组:
array1 = [{'key':1, 'values':["one", "1"]}, {'key':2, 'values':["two", "2"]}]
问题1:如何访问该数组中的第一个对象,即'key'= 1?
问题2:如何循环使用此对象的“值”?
例如在Python中我会做类似的事情:
get_first_object = array1[0]
for value in array1['values']:
print value
我怎样才能在javascript中进行这种编码?
编辑我没有正确提到这个我的“array1”来自Python视图,因此它的输出与标准JS数组不同(参见下面的console.log输出):
["[{'key': 1, 'values': ["one", "1"]}, {'key': 2, 'values':["two", "2"]}]"]
所以当我做var object = array1[0]
时,我得到以下输出:
[{'key': 1, 'values': ["one", "1"]}, {'key': 2, 'values': ["two", "2"]}]
它似乎没有获得第一个对象,而是将整个事物视为一个对象。
也
我需要动态获取 - 所以我实际上不能硬编码“array1 [0]”或“array1 [1]” - 我该怎么做?
我是如何定义数组的
var array1 = ["{{ my_array_1|safe }}"];
编辑2
我希望从数组中获取对象的方式如下:var selected_id = 1;
var selected_object = array[key=selected_id];
我们假设您的数组是这样的:
var array = [{'key': 1, 'values': ["one", "1"]}, {'key': 2, 'values': ["two", "2"]}];
这是一个包含javascript对象的数组,每个对象有2个属性'key'
,其对应值是一个整数,'values'
对应的值是数据数组。如果我理解正确的话,你想要一个整数input_id
来访问前面提到的数据数组。
function access_data (id) {
for(let obj of array){
if(obj['key'] == id){
return obj['values'];
}
}
}
如果您熟悉python,您可能会认识到for .... of
语法,因为它与python的for .... in
基本相同。上面的代码假设你的数组是一个名为global
的array
变量。使用整数参数调用函数循环遍历数组包含的每个对象,检查其'key'
属性是否与给定的id
匹配,如果匹配,则返回相应的数据数组。
关于for ... of
循环here的更多细节
这个自我解释的代码应该纠正你的疑虑
var array1 = [{'key':1, 'values':["one", "1"]}, {'key':2, 'values':["two", "2"]}];
// First Object
var firstObject = array1[0];
console.log("First object", firstObject);
// Accessing key property of first object
var keyOfFirstObj = firstObject.key;
console.log("Key", keyOfFirstObj);
// Iterating through all the values of first object
Object.values(firstObject).forEach(
el => console.log("Value -- ", el)
)
你可以硬编码:array1[0].key // 1
使用forEach
循环:
const array1 = [{'key':1, 'values':["one", "1"]}, {'key':2, 'values':["two", "2"]}]
array1.forEach(arrItem => console.log(arrItem))
或者map
,如果您打算更改数据,如下所示@str:
const array1 = [{'key':1, 'values':["one", "1"]}, {'key':2, 'values':["two", "2"]}]
array1.map(arrayItem => console.log(arrayItem);
在map
vs forEach
:https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
有几种方法可以做到这一点,基本的for
循环和for..of
循环
for (let i = 0; i < array1.length; i++) {
console.log(array1[i])
}
for (const val of array1) {
console.log(val)
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
如果你想选择一个键属性为“1”的对象,你可以使用上面的方法遍历数组,当条件为真时返回,或者你可以使用Array#filter
const filtered = array1.filter(item => item['key'] === 1) //=> returns a new array
const myObj = filtered[0]
如果你想要一个类似于Python的语法,你可以使用for ... in循环:
let get_first_object = array1[0];
for (let index in array1['values']){
console.log(array1['values'][index]);
}
编辑:至于你的编辑,你需要2个循环
let objectArray= array1[0];
if(objectArray){
for(let outerIndex in objectArray){
for(let innerIndex in objectArray[outerIndex]['values']){
console.log(objectArray[outerIndex]['values'][innerIndex];
}
}
}
编辑:
let objectArray= array1[0];
if(objectArray){
let valuesObject=objectArray.filter(f=>f.key===selectedId);
for(let innerIndex in valuesObject['values']){
console.log(valuesObject ['values'][innerIndex];
}
}
}