如何做一个基本的javascript循环/访问数组数据

问题描述 投票:0回答:5

我一直在寻找一个简单的方法来循环一个数组(我没有使用过很多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];
javascript jquery arrays loops for-loop
5个回答
0
投票

我们假设您的数组是这样的:

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基本相同。上面的代码假设你的数组是一个名为globalarray变量。使用整数参数调用函数循环遍历数组包含的每个对象,检查其'key'属性是否与给定的id匹配,如果匹配,则返回相应的数据数组。

关于for ... of循环here的更多细节


0
投票

这个自我解释的代码应该纠正你的疑虑

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

0
投票

你可以硬编码: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);

mapvs forEachhttps://codeburst.io/javascript-map-vs-foreach-f38111822c0f


0
投票

有几种方法可以做到这一点,基本的for循环和for..of循环

for

for (let i = 0; i < array1.length; i++) {
  console.log(array1[i])
}

for..of

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]

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]; 
       }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.