我有一个JSON数组如下
[{
"x": {
"id": "123"
},
"y": {
"value": "123"
}
}, {
"x": {
"id": "256"
},
"y": {
"value": "256"
}
}, {
"y": {
"value": "789"
}
}]
如何获取对象id
的最新x
值以及包含对象y
的所有值的数组。所以输出应该是256
& [123, 256, 789]
答案 0 :(得分:2)
这里有一些很好的答案,但我以为我会使用lodash丢掉几个衬垫:
var lastX = _.get(_.findLast(data, 'x'), 'x.id');
var yvalues = _.map(data, 'y.value');
答案 1 :(得分:1)
你可以通过以下方式做到:
var yArray = [];
var xValue = 0;
foreach(object o in youJsonArray){
xValue = o.x.id
yArray.push(o.y.value)
}
答案 2 :(得分:1)
var json=JSON.parse('[{'+
'"x": {'+
'"id": "123"'+
'},'+
'"y": {'+
'"value": "123"'+
'}'+
'}, {'+
'"x": {'+
'"id": "256"'+
'},'+
'"y": {'+
'"value": "256"'+
'}'+
'}, {'+
'"y": {'+
'"value": "789"'+
'}'+
'}]');
var y=[],
x=0;
json.forEach(function(item,index){
if(item.y)
y.push(item.y.value);
if(item.x)
x=item.x.id;
});
console.log(x);
console.log(y);
答案 3 :(得分:1)
您可以映射该值并检查给定的id
,并将其用作x
的最后一个值。
var data = [{ x: { id: "123" }, y: { value: "123" } }, { x: { id: "256" }, y: { value: "256" } }, { y: { value: "789" } }],
lastX,
allY = data.map(function (a) {
if (a.x && 'id' in a.x) {
lastX = a.x.id;
}
return a.y.value;
});
console.log(lastX);
console.log(allY);
答案 4 :(得分:1)
使用lodash:
可以保持这么短_.map(arr, 'y.value');
// => ["123", "256", "789"]
_.get(
_.findLast(arr, _.unary(_.partialRight(_.has, 'x'))),
'x.id'
);
// => "256"
请注意,两个表达式都使用字符串属性路径表示法(y.value
和x.id
)。这种简单的功能消除了我们本来不得不为自己编写的代码。 unary()
,partialRight()
和has()
函数用于组成findLast()
iteratee函数。