Javascript:遍历对象文字值

我有一个标准的jQuery插件,在上面创build默认设置:

jQuery.fn.myPlugin = function(options) { var defaults = { starts: "0px,0px", speed: 250, ... }; o = $.extend(defaults, options); } 

我有另一个名为numberOfObjectsvariables。

我试图循环通过默认的variables。 对于find的每个对象(来自numberOfObjects )我需要复制variables值的值。 所以,如果numberOfObjectsvariables是3,则defaults.starts应该是0px,0px > 0px,0px > 0px,0px 。 >用于分割值。

这是我现在有。 X表示默认的variables名称。 Y表示x的当前值的variables。 我已经得到了这么多,不知道下一步该做什么。

 for (x in defaults) { // x is defaults.x defaults.x = defaults.x + " > y"; } 
 var obj = { 'foo': 1, 'bar': 2 }; for (var key in obj) { console.log(obj[key]); } 

或者用jQuery:

 $.each(obj, function(key, value) { console.log(this, value, obj[key]); }); 

你不应该依靠这个jQuery。

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

最佳做法是validation正在迭代的对象属性是否来自对象本身,而不是从原型链inheritance。 你可以使用.hasOwnProperty()来检查:(当然,如果你想包含inheritance的属性,只要删除if语句)。

以下是一般情况:

 for(var index in object) { if (object.hasOwnProperty(index)) { var value = object[index]; // do something with object value here. } } 

这里是你提到的例子,你要创build一个重复的对象,每个键的值根据var numberofobjects的值复制(我已经添加了两个解决scheme,您可以修改现有的对象或创build一个新的一):

 // function to repeat value as a string inspired by disfated's answer here http://stackoverflow.com/questions/202605/repeat-string-javascript function repeatValue(value, count) { value = String(value); // change to string to be able to add " > " as in question if (count < 1) return ''; var result = ''; while (count > 1) { if (count & 1) result += value + " > "; count >>= 1, value += " > " + value; } return result + value; } var numberofobjects = 3; var newObject = {}; // for use if creating a duplicate object with the new values for(var x in defaults) { if (defaults.hasOwnProperty(x)) { //use this to replace existing values defaults[x] = repeatValue(defaults[x], numberofobjects); //or use this to create values in the new object newObject[x] = repeatValue(defaults[x], numberofobjects); } } 

在你的代码中:

 for(x in defaults){ defaults.x = defaults.x + " > y"; } 

你需要说defaults[x]而不是defaults.x

x是一个variables,它包含一个string,该string是defaults对象的关键字,括号(数组样式)语法允许您使用该variables来获取属性。 用点符号defaults.x正在寻找一个名为“x”的属性,相当于defaults["x"]

在我们开始之前,先设置我们的基本对象:

 const x = { x: 1, y: 2, z: 3 }; 

我们可以使用Object.keys(x)返回对象中所有键的数组。

 Object.keys(x) > ['x', 'y', 'z'] 

现在我们可以映射,过滤,减less和循环我们的数组,并在我们的对象内使用这个值做一些事情:

 Object.keys(x).map(key => x[key] + 1) > [2,3,4] Object.keys(x).forEach(key => console.log(x[key])) > [1,2,3] 

主要拿走这里是我们必须使用钥匙来获得这个特定的价值,它的工作,但感觉有点笨拙。 ES2017带来了Object.values() ,它可以作为返回Object中所有值的数组的一个很好的快捷方式。

 Object.values(x) > [1,2,3] Object.values(x).map(value => value + 1) > [2,3,4] Object.values(x).forEach(value => console.log(value)) > [1,2,3] 

你可以在MDN上阅读关于Object.values()的更多信息,还可以包含一个polyfill,如果你需要支持那些尚未实现的浏览器和浏览器。

 var yourVariable = { Bobe: 23, Pope: 33, Doop: 43, Dope: 53 }; for(var keyName in yourVariable){ document.write(keyName, " : ",yourVariable[keyName]," "); };