我有一个JavaScript对象数组。写console.log(myarry)
时,它将在控制台中以下面的形式显示。
Array[2]
0: Object
one: "one"
1: Object
two: "two"
length: 2
在这个数组中,我的键和值是相同的,我试图获取变量的键或值并打印它。当我尝试下面的代码时,它显示了 对象对象。
for (var key in myarry) {
alert("Key is " + key + ", value is" + myarry[key]);
}
答案 0 :(得分:9)
检查此代码段
<html>
<label>Enter an New item to add in Stock</label> <br> </br>
<input type="text" name=" itemName" id="addItemInStock><br></br>
<p id="errorMsg"></p>
<button onclick="addToStock()" return="false">Add</button>
<p id="showList"></p>
<select id="showInDropDown">
<option value="" disabled selected style="display: block;">Stock Items</option>
</select>
<script>
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("showList").innerHTML = fruits;
var newItem = document.getElementById("addItemInStock");
function addToStock(){
if ((newItem.value) === ""){
document.getElementById("errorMsg").innerHTML = "Blank item cannot be added!!";
document.getElementById("errorMsg").style.display = "block";
}
else{
document.getElementById("errorMsg").style.display = "none";
fruits.push(newItem.value);
document.getElementById("showList").innerHTML = fruits;
clearAndShow();
}
var sel = document.getElementById("showInDropDown");
document.getElementById("showInDropDown").innerHTML = "";
for (var i = 0; i < fruits.length; i++)
{
var opt = document.createElement('option');
sel.appendChild(opt);
}
}
function clearAndShow(){
newItem.value = "";
}
</script>
</html>
希望有所帮助
答案 1 :(得分:2)
使用 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]]);
}
}
&#13;
答案 2 :(得分:2)
我认为您有两个主要选项来使用Object.keys
来获取对象的键:forEach
;或简单的for
。
forEach
如果您使用的环境支持ES5的Array
功能(直接或使用填充程序),则可以使用新的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]);
});
});
&#13;
forEach
接受迭代器函数,并且可选地,在调用迭代器函数时使用的值this
(上面未使用)。为数组中的每个条目调用迭代器函数,按顺序跳过稀疏数组中不存在的条目。虽然
forEach
的好处是您不必在包含范围内声明索引和值变量,因为它们作为迭代函数的参数提供,因此很好地限定为那次迭代。
如果您担心为每个阵列条目调用函数的运行时成本,请不要这样做; technical details
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]]);
}
}
&#13;
答案 3 :(得分:0)
我正在尝试获取变量的键或值并将其打印出来。
然后你可以
for (var key in myarry) {
var value = myarry[key];
}
答案 4 :(得分:0)
你可以这样做
a.forEach(function(value,key) {
console.log(value,key);
});
您可以在变量中获取键和值并使用它们。
答案 5 :(得分: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]}.`);
});
答案 6 :(得分:0)
根据您的构造,您可以做到
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))
)