从嵌套对象中获取第一个值

时间:2017-02-08 15:43:36

标签: javascript arrays object

我有一个名为allInvalidFields的对象,其中列出标识符下的无效字段,例如_0_3

对象可能看起来像这样

allInvalidFields = {
    "_0" : {
        0: input.foo,
        1: select.la
    }
    "_1" : {
        0: input.foofoo,
        1: select.lala
    }
}

但同样地,它不能将_0作为第一个键,并且看起来像这样:

allInvalidFields = {
    "_1" : {
        0: input.alice,
        1: select.bob
    }
    "_3" : {
        0: input.foo
    }
}

如何从列表中的第一个对象中获取第一个值?因此,在上面的示例中,它将是input.fooinput.alice,具体取决于搜索的数据集。

3 个答案:

答案 0 :(得分:1)

推断密钥是按数字顺序排列的,前面加上“_”。

根据假设

function first(obj,n){
  let smallest = Infinity;
  for(i in obj){
    console.log(i);
    let val='';
    if (i.toString()[0]=='_'){
      val = parseInt(i.toString().substring(1));
    }else{
      val = i;
    }
    if( val < smallest ){
      smallest = val;
    }
  }
  if(n>0){
     return first(obj["_"+smallest],n-1);
  }
  return obj[smallest];
}

first({"_0" : {
    0: "input.foo",
    1: "select.la"
},
"_1" : {
    0: "input.foofoo",
    1: "select.lala"
}},1); // input.foo

答案 1 :(得分:-1)

你需要这样的东西。

var allInvalidFields = {
  "_0": {
    "0": "input.foo",
    "1": "select.la"
  },
  "_1": {
    "0": "input.foofoo",
    "1": "select.lala"
  }
};

var firstInput = Object.keys(allInvalidFields)[0];
console.log(allInvalidFields[firstInput][0]);

答案 2 :(得分:-1)

Object.values(allInvalidFields)[0][0];

取第一个属性对象的第一个值。

小注意:拥有像_1这样的键是糟糕的风格......

短版本的程序回答:

allInvalidFields["_"+Object.keys(allInvalidFields).map(el=>el=+el.replace("_","")).sort()[0]][0]