JavaScript中的For..In循环-键值对

2020/09/27 20:21 · javascript ·  · 0评论

我想知道是否有办法foreach在JavaScript中执行类似PHP 循环的操作。我正在寻找的功能类似于以下PHP代码片段:

foreach($data as $key => $value) { }

我当时在看JS for..in循环,但是似乎没有办法指定as如果我使用“正常”的for循环(for(var i = 0; i < data.length; i++执行此操作,是否有办法获取键=>值对?

如果可以在本地使用ES6或与Babel(js编译器)一起使用,则可以执行以下操作:

const test = {a: 1, b: 2, c: 3};

for (const [key, value] of Object.entries(test)) {
  console.log(key, value);
}

将输出以下输出:

a 1
b 2
c 3

Object.entries()方法[key, value]for...in循环提供的顺序返回给定对象自己的可枚举属性的数组(区别是for-in循环也枚举原型链中的属性)

希望能帮助到你!=)

for (var k in target){
    if (target.hasOwnProperty(k)) {
         alert("Key is " + k + ", value is " + target[k]);
    }
}

hasOwnProperty用于检查您是否target确实具有该属性,而不是从其原型继承而来。会更简单一些:

for (var k in target){
    if (typeof target[k] !== 'function') {
         alert("Key is " + k + ", value is" + target[k]);
    }
}

它仅仅检查k是不是方法(好像targetarray,你会得到很多的方法提醒,如indexOfpushpop,等。)

没有人提到过,Object.keys所以我会提及。

Object.keys(obj).forEach(function (key) {
   // do something with obj[key]
});

因为...将为您工作。

for( var key in obj ) {
  var value = obj[key];
}

在现代JavaScript中,您还可以执行以下操作:

for ( const [key,value] of Object.entries( obj ) ) {

}
var obj = {...};
for (var key in obj) {
    var value = obj[key];

}

php语法只是糖。

我假设您知道这i是关键,并且可以通过data[i](只需一个快捷方式)获取值

ECMAScript5 为数组引入了forEach [MDN](似乎您有一个数组):

data.forEach(function(value, index) {

});

MDN文档为不支持该功能的浏览器提供了填充程序。

当然,这不适用于对象,但是您可以为它们创建类似的功能:

function forEach(object, callback) {
    for(var prop in object) {
        if(object.hasOwnProperty(prop)) {
            callback(prop, object[prop]);
        }
    }
}

由于您将问题标记为 ,jQuery提供了$.each [docs],它可以遍历数组和对象结构。

您可以使用for..in

for (var key in data)
{
    var value = data[key];
}
for (var key in myMap) {
    if (myMap.hasOwnProperty(key)) {
        console.log("key =" + key);
        console.log("value =" + myMap[key]);
    }
}

在javascript中,每个对象都有一堆内置的具有元信息的键值对。当您遍历对象的所有键值对时,您也在遍历它们。使用hasOwnProperty()可以将其过滤掉。

ES6将提供Map.prototype.forEach(callback),可以像这样使用

myMap.forEach(function(value, key, myMap) {
                        // Do something
                    });
let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))

// a 1
// b 2
// c 3

您可以为此使用“ for in”循环:

for (var key in bar) {
     var value = bar[key];
}

以下是一个尽可能接近您的示例。

for(var key in data){
  var value = data[key];    
  //your processing here
}

如果您使用的是jQuery,请参见:http : //api.jquery.com/jQuery.each/

如果您正在使用Lodash,则可以使用_.forEach

_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  console.log(key + ": " + value);
});
// => Logs 'a: 1' then 'b: 2' (iteration order is not guaranteed).

提出此问题以来的最近几年,Javascript添加了一些新功能。其中之一是Object.Entries方法。

直接从MDN复制的是以下代码段


const object1 = {
  a: 'somestring',
  b: 42
};

for (let [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

是的,您也可以在javascript中使用关联数组:

var obj = 
{
    name:'some name',
    otherProperty:'prop value',
    date: new Date()
};
for(i in obj)
{
    var propVal = obj[i]; // i is the key, and obj[i] is the value ...
}
var global = (function() {
   return this;
})();

// Pair object, similar to Python

function Pair(key, value) {
    this.key = key;
    this.value = value;

    this.toString = function() {
       return "(" + key + ", " + value + ")";
    };
}

/**
 * as function
 * @param {String} dataName A String holding the name of your pairs list.
 * @return {Array:Pair} The data list filled
 *    with all pair objects.
 */
Object.prototype.as = function(dataName) {
    var value, key, data;
    global[dataName] = data = [];

    for (key in this) {
       if (this.hasOwnProperty(key)) {
          value = this[key];

          (function() {
             var k = key,
                 v = value;

            data.push(new Pair(k, v));
          })();
       }
    }

    return data;
};

var d = {
   'one': 1,
   'two': 2
};

// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
   key = data[i].key;
   value = data[i].value;

   console.log("key: " + key + ", value: " + value);
}

// delete data when u've finished with it.
delete data;
本文地址:http://javascript.askforanswer.com/javascriptzhongdefor-inxunhuan-jianzhidui.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!