在Javascript中,我有一个JSON对象,我只想处理这些项目:
var json = {
itema: {stuff: 'stuff'},
itemb: {stuff: 'stuff'},
itemc: {stuff: 'stuff'},
itemd: {stuff: 'stuff'}
}
在Python中,我可以做到
print json.items()
[{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'}]
我可以这样做是js吗?
答案 0 :(得分:3)
你不能像在python中那样执行此操作而不扩展你不想做的Object.prototype,因为它是痛苦的路径。
你可以很容易地创建一个辅助函数,它可以遍历对象并将值放入一个数组中,但是这样:
function items(obj) {
var i, arr = [];
for(i in obj) {
arr.push(obj[i]);
}
return arr;
}
Ps:JSON是一种数据格式,你拥有的是一个对象文字。
答案 1 :(得分:1)
在python中dict.items
返回一个元组列表,其中包含键和dict
的值。 Javascript没有元组,所以它必须是嵌套数组。
如果你原谅我用一些python代码来表明差异。
>>> {1:2, 2:3}.items()
[(1, 2), (2, 3)]
>>> {1:2, 2:3}.values()
[2, 3]
我看到接受的答案返回一个对象值数组,它相当于python函数dict.values
。要求的是dict.items
。要做到这一点,只需循环并构建一个包含2个元素数组的嵌套数组。
function items(obj){
var ret = [];
for(v in obj){
ret.push(Object.freeze([v, obj[v]]));
}
return Object.freeze(ret);
}
我将Object.freeze
置于迂腐中并强制不应更改返回的值,以模拟python元组的不变性。显然,如果你把它拿出来它仍然有效。
应该注意的是,这样做有点违背了{{1}}的目的,因为它是以线性而非关联的方式迭代对象时使用的,它避免了计算哈希值以查找每个元素关联数组。对于那些关心大型物品的小物件,它可能会减慢您的速度,并且可能有更惯用的方式在javascript中执行您想要的操作。
另一种新方法是使用Object.entries()来完全按照自己的意愿行事。
items
支持仅限于文档中提到的那些浏览器版本。
答案 2 :(得分:0)
ubershmekel的答案使用了懒惰的评估,而下面我的答案则使用了急切的评估。懒惰评估有很多好处,在某些情况下出于性能原因使其更适合使用,但是渴望评估的透明性可以成为开发速度的福音,在某些情况下可能会使其更受欢迎。
const keys = Object.keys;
const values = object =>
keys(object).map(key => object[key]);
const items = object =>
keys(object).map(key => [key, object[key]])
obj = {a: 10, b: 20, c: 30};
keys(obj) // ["a", "b", "c"]
values(obj) // [10, 20, 30]
items(obj) // [["a", 10], ["b", 20], ["c", 30]]
items(obj).forEach(([k, v]) => console.log(k, v))
// a 10
// b 20
// c 30
答案 3 :(得分:-1)
感谢JavaScript的最新更新-我们现在可以解决此问题:
function items(iterable) {
return {
[Symbol.iterator]: function* () {
for (key in iterable) {
yield [key, iterable[key]];
}
}
};
}
for (const [key, val] of items({"a": 3, "b": 4, "c": 5})) {
console.log(key, val);
}
// a 3
// b 4
// c 5
for (const [key, val] of items(["a", "b", "c"])) {
console.log(key, val);
}
// 0 a
// 1 b
// 2 c
答案 4 :(得分:-3)
不确定你想做什么,但我猜Json.stringify会做那样的事情。见http://www.json.org/js.html