将JavaScript数组的键和值存入变量中

9
我有一个JavaScript对象数组。当我写console.log(myarry)时,它会以以下形式显示在控制台中。
Array[2]
0: Object
one: "one"

1: Object
two: "two"
length: 2

在这个数组中,我的键和值相同,我想将键或值赋给一个变量并打印出来。当我尝试使用下面的代码时,它显示:

object object

for (var key in myarry) {
 alert("Key is " + key + ", value is" + myarry[key]);
}

使用for-loop而不是for-in来迭代数组...还要了解Object.keys以获取对象的键 - Rayon
1
你能在for循环之前展示一下你的代码吗?你是在哪里给myarray赋值的? - Teocci
实际上,这个数组来自第三方API,当我以上述格式写入console.log(myarry)时,我可以看到这个数组。我的目标是将键或值存入变量中。我也尝试了for循环,但它也显示对象对象。 - Jomol MJ
它不是“java script”或“java-script”,而是“JavaScript”。 - user663031
当一个对象被“打印”(即转换为字符串)时,它变成了[object Object]。如果你想打印出一些合理的对象表示,你可以使用JSON.stringify,或者按照自己的方式进行字符串转换。 - user663031
抱歉,我在工作中所以误发了答案。现在我已经编辑过了,应该没问题了。 - Teocci
7个回答

20

查看该代码片段

var obj = [{
  "1": "one"
}, {
  "2": "two"
}]
obj.forEach(function(item) {
  Object.keys(item).forEach(function(key) {
    console.log("key:" + key + "value:" + item[key]);
  });
});

希望这能有所帮助。


4
  • 使用for-loop而不是for-in来迭代数组。

  • 使用Object.keys获取object的键。

var arr = [{
  one: 'one'
}, {
  two: 'two'
}];

for (var i = 0, l = arr.length; i < l; i++) {
  var keys = Object.keys(arr[i]);
  for (var j = 0, k = keys.length; j < k; j++) {
    console.log("Key:" + keys[j] + "  Value:" + arr[i][keys[j]]);
  }
}


2

我认为使用Object.keys获取对象的键有两个主要选项: forEach;或者简单的for

1. 使用forEach

如果你使用支持ES5的Array功能的环境(直接或使用shim),可以使用新的forEach

var myarray = [{one: 'one'}, {two: 'two'}];

myarray.forEach(function(item) {
  var items = Object.keys(item);
  items.forEach(function(key) {
   console.log('this is a key-> ' + key + ' & this is its value-> ' + item[key]);
 });
});

forEach接受一个迭代器函数和一个可选的值作为this,当调用该迭代器函数时使用(上面未使用)。迭代器函数按顺序为数组中的每个条目调用,跳过稀疏数组中不存在的条目。虽然

forEach的好处是您不必在包含范围中声明索引和值变量,因为它们作为参数提供给迭代函数,并且很好地作用于该迭代。

如果您担心为每个数组条目进行函数调用的运行时成本,那么不用担心;技术细节

2. 使用简单的for

有时候老方法是最好的:

var myarray = [{one: 'one'}, {two: 'two'}];

for (var i = 0, l = myarray.length; i < l; i++) {
  var items = myarray[i];
  var keys = Object.keys(items);
  for (var j = 0, k = keys.length; j < k; j++) {
    console.log('this is a key-> ' + keys[j] + ' & this is its value-> ' + items[keys[j]]);
  }
}


2
根据您的结构,您可以执行以下操作:
const arr = [{ key1: 'val1' }, { key2: 'val2' }]

arr.forEach((a, i) =>
  console.log(i, [{ key: Object.keys(a) }, { val: Object.values(a) }])
)

回答你的问题:

arr.forEach((a, i) =>
  alert("Key is "+ Object.keys(a) + ", value is " +  Object.values(a))
)

1
我正在尝试将键或值存储到变量中并打印它。然后你可以:

var myarry = [{ one: 'one' }, { two: 'two' }];

for (var key in myarry) {
  var value = myarry[key];
  console.log(key, value)
}


我已经尝试过了。我可以在控制台中看到值。但是当我打印时,它仍然显示对象对象。请帮帮我。 - Jomol MJ

0

你可以用这种方式来实现

const a = [{ one: 'one' }, { two: 'two' }];

a.forEach(function(value,key) {
   console.log(value,key);
});

你可以将键和值存储在变量中并使用它们。


0

这是一个有趣的方法。

const arr = [{ one: 'one' }, { two: 'two' }];

Object.entries(arr).forEach(([_, obj]) => {
  const key = Object.keys(obj)[0];
  console.log(`Key is ${key}, value is ${obj[key]}.`);
});


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