通过属性名称从不同级别的对象获取值
我有一个以下格式的对象,我需要从该对象的所有级别的Price
属性中获取所有值。
var o = {
Id: 1,
Price: 10,
Attribute: {
Id: 1,
Price: 2,
Modifier: {
Id: 34,
Price: 33
}
}
};
我在想LinqToJS和jquery.map()
方法,但我想尽可能通用一种方法。 我试过这个,但它只在第一级工作:
var keys = $.map(o, function(value, key) {
if (key == "Price") {
return value;
}
});
您可以使用递归函数来测试属性的名称类型及其类型。 如果它的名字是Price
,将它添加到数组中。 如果它是一个对象,则通过该对象递归查找Price
键。 尝试这个:
function getPrices(obj, arr) {
$.each(obj, function(k, v) {
if (k == "Price")
arr.push(v);
else if (typeof(v) == 'object')
getPrices(obj[k], arr);
});
return arr;
}
var prices = getPrices(o, []);
console.log(prices); // = [10, 2, 33]
工作示例
您可以使用jQuery的$.map()
非常简单地执行此操作:
var o = {
Id: 1,
Price: 10,
Attribute: {
Id: 1,
Price: 2,
Modifier: {
Id: 34,
Price: 33
}
}
};
var res = $.map(o, function mapper(obj, key) {
return key === "Price" ? obj : $.map(obj, mapper)
});
document.querySelector("pre").textContent = JSON.stringify(res)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<pre></pre>
你可以使用for..in
循环,递归
var o = {
Id: 1,
Price: 10,
Attribute: {
Id: 1,
Price: 2,
Modifier: {
Id: 34,
Price: 33
}
}
};
var res = [];
(function re(obj) {
for (var prop in obj) {
if (prop === "Price") {
res.push(obj[prop])
} else {
re(obj[prop])
}
}
}(o));
console.log(res)
链接地址: http://www.djcxy.com/p/90781.html
上一篇: Get values by property name from an object at different levels
下一篇: View being blocked by UITransitionView after being presented