如何在JavaScript中使用foreach循环对象?

4

我目前正在使用JavaScript和jQuery在Qlik Sense中构建混搭应用。我已经进行了一些数据选择,并将它们放入了一个变量对象中:

var CurrentSelec = app1.selectionState().selections;
console.log(CurrentSelec);`
console.log(typeof CurrentSelec);

这是我在浏览器控制台中得到的内容:

CurrentSelec Object

我想要在foreach循环中显示qSelected的值:

我已经尝试了Javascript:

for(var index in CurrentSelec) { 
    console.log(index.qSelected);
}

我已经尝试使用jQuery:
$.each(CurrentSelec, function(i, index) {
  console.log(index.qSelected)
});

但是我的浏览器控制台没有显示我的foreach的日志。

您知道如何正确地对对象进行foreach并在浏览器控制台中显示其内容吗?

谢谢。


CurrentSelect 不是一个对象,而是一个 数组。如果它是一个对象,你的图片第一行会显示 Object 而不是 Array(1),并且 typeof CurrentSelect 的输出将会是 Object {} 而不是 object - Tyler Roper
10个回答

9
您可以使用Object.keys()方法,该方法返回一个包含对象中所有键的数组。然后我们将其传递给Array.forEach()方法进行处理。例如:
Object.keys(lunch).forEach(function (item) {
    console.log(item); // key
    console.log(lunch[item]); // value
});

3

您的CurrentSelec变量是一个数组,而不是普通对象,因此只需使用它的forEach方法:

CurrentSelec.forEach(function (el) {
    console.log(el.qSelected);
});

0

var displayArray = [{id:1,dispName:"abc"},{id:2,dispName:"aaaa"},{id:3,dispName:"bbbb"},{id:4,dispName:"xxxxx"},{id:5,dispName:"www"}]
      displayArray.forEach(obj => {
      console.log(obj)
      });


0

你可以使用 JavaScript 的 for in 循环来迭代对象。

例如,CurrentSelec 是你的对象。

for(key in CurrentSelec){
    //key is your object's main query.
    //CurrentSelec is your object's nested array if has.
    console.log(key);
    console.log(CurrentSelec[key]);
}

为什么使用“for...in”进行数组迭代是一个不好的选择? - Tyler Roper

0

根据您的JavaScript示例,您正在错误地浏览对象。 为了浏览它,请使用[]和您设置的变量。 例如,

for (var index in CurrentSelec) {
  console.log(CurrentSelec[index].qSelected);
}

这段代码选择了CurrentSelec内的每个子元素,并打印出其相应的qSelected值。

在你的示例中,当你写下for (var index in CurrentSelec) {...};时,你是在说对于CurrentSelec内的每个子元素,将index = child(其中child只是你的CurrentSelec对象的键),然后继续执行for循环。

因此,当你写下console.log(index.qSelected)时,你试图访问index下的qSelected值,但它永远不存在。相反,你应该使用你在for循环中收到的每个index来遍历整个父级对象。


1
为什么在数组迭代中使用“for ... in”是一个坏主意? - Tyler Roper
@Santi 啊,我忽略了它是一个数组的事实。然而,只要你正确迭代,它仍然是有效的。 - notphilphil
1
当然。我只是想提供一些思路。 - Tyler Roper

0

尝试使用以下代码,看看它是否有效,而不是使用CurrentSelec,请使用CurrentSelec[0]

$.each(CurrentSelec[0], function(i, index) {
  console.log(index.qSelected)
});

0
for (var index in CurrentSelec[0]) {
 console.log(index.qSelected);
}

试一下这个


考虑为你的回答增加一些实质性内容。仅仅给OP提供代码替换并不能解释太多。 - Tyler Roper

0

这里缺少一些信息(请将其重命名为“currentSelec”),但是请执行以下操作:

CurrentSelec.forEach(function(item){
         console.log(item.qSelected)
    })

你所做的是对数组键进行迭代,而不是值。

0

你可以像这样使用jQuery:

$.each(CurrentSelec, function( key, value ) {
   alert( key + ": " + value );
});

我相信它会有帮助,


0

看起来你混淆了数组和对象。 根据你提供的图片,我认为你有一个包含对象的数组。

//Naming indicates mutliple selections
app1.selectionState().selections; 

遍历数组很容易,访问对象值也很简单:

// CurrentSelec = [{qSelected : '1'},{qSelected : '2'}];
CurrentSelec.forEach ( selection => console.log(selection.qSelected) );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接