【问题标题】:get child node of unknown parent from json format in javascript [duplicate]从javascript中的json格式获取未知父节点的子节点[重复]
【发布时间】:2017-11-01 12:53:17
【问题描述】:

我的函数接收到这样的 json

{
    IdontKnowWhatsHere1: [ 
        "item1", 
        "item2", 
        "item3"
    ]
}

我想要的是在不知道它们的标签或父对象是什么的情况下获取数组值, 并且最好也提取父级。

谢谢

【问题讨论】:

  • 嗨@Roman 我了解那里的问题和解决方案,确定了根源,因此他们可以轻松获得孩子,但这里的根源未知
  • 我确实对将 OP 的问题标记为链接的 SO 源的副本的决定提出质疑。 OP 的 Q 直接指向 Object.entries 或任何其他产生相同结果的解决方案。顺便说一句,在 2017 年,有了 ES5 Array 方法,基于 for 循环的解决方案不再是合适的方法。

标签: javascript arrays nodes parent-child extract


【解决方案1】:

您可以使用Object#keys 获取对象的键,并获取第一个键(索引0)。将键分配给值,以获取数组:

var data = {IdontKnowWhatsHere1: [ "item1", "item2", "item3"]};

var key = Object.keys(data)[0];
var values = data[key];

console.log(key);
console.log(values);

如果你的浏览器支持Object#entriesObject#values或者你使用babel,你可以直接获取key和value或者直接获取value:

const data = {IdontKnowWhatsHere1: [ "item1", "item2", "item3"]};

const [key, entryValues] = Object.entries(data)[0];

const values = Object.values(data)[0];

console.log(key, entryValues);

console.log(values);

【讨论】:

  • 也可以使用Object.entries(data),它会返回一个数组:[[key, val], [key, val]] ...
  • 这都是假设 OP 将始终期望对象只有 1 个属性(自然假设,给出他的例子)。如果他想在多个属性的情况下提取,还有其他的解决方案。
  • @TKoL - 确实如此。然后用 Array#map 而不是[0] 进行迭代,得到一个结果数组。
  • @OriDrori 两者都在工作,但是使用条目的第二个示例最好添加 [0] 以获取父值并添加 [1] 以获取子值,非常感谢您救了我 :)
  • ...只是四舍五入...var data = { IdontKnowWhatsHereA: ["itemA1", "itemA2", "itemA3"], IdontKnowWhatsHereB: ["itemB1", "itemB2", "itemB3"], IdontKnowWhatsHereC: ["itemC1", "itemC2", "itemC3"] };var dataEntryList = /* ES6 */Object.entries(data);console.log('dataEntryList : ', dataEntryList);dataEntryList = /* ES5 */Object.keys(data).map(function (key) { return [key, this[key]]; }, data);console.log('dataEntryList : ', dataEntryList);
猜你喜欢
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多