Javascript:遍历对象文字值
我有一个标准的jQuery插件,在上面创build默认设置:
jQuery.fn.myPlugin = function(options) { var defaults = { starts: "0px,0px", speed: 250, ... }; o = $.extend(defaults, options); }
我有另一个名为numberOfObjects
variables。
我试图循环通过默认的variables。 对于find的每个对象(来自numberOfObjects
)我需要复制variables值的值。 所以,如果numberOfObjects
variables是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 });
-
Mozilla开发者文档 – https://developer.mozilla.org
-
旧版浏览器的Polyfill
-
查看效果结果 – https://jsperf.com
最佳做法是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]," "); };