获取最新出现的对象值

时间:2016-10-24 14:55:55

标签: javascript lodash

我有一个JSON数组如下

[{
    "x": {
        "id": "123"
    },
    "y": {
        "value": "123"
    }
}, {
    "x": {
        "id": "256"
    },
    "y": {
        "value": "256"
    }
}, {
    "y": {
        "value": "789"
    }
}]

如何获取对象id的最新x值以及包含对象y的所有值的数组。所以输出应该是256& [123, 256, 789]

5 个答案:

答案 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.valuex.id)。这种简单的功能消除了我们本来不得不为自己编写的代码。 unary()partialRight()has()函数用于组成findLast() iteratee函数。