如何访问嵌套的json数组

时间:2018-04-27 16:23:59

标签: javascript

我正在尝试访问以下数组中的数据,但在使用.forEach时遇到问题 我想访问所有singleLine.text,但它不会让我。我猜是因为同一级别有多个singleLines。

var a = [ 
  { boxedCharacters: { text: '1040043' } },
  { singleLine: { text: '東京都中央区日本橋新古町' } },
  { singleLine: { text: 'この度は、数多くのお店の中から当店を'} },
  { singleLine: { text: 'お選びご来店頂きまして誠にありがとう'} }
]

 a.forEach(function(value){
      console.log(value.singleLine.text)
      })

我已经尝试this但它不是最好的解决方案,因为它会为boxedCharacters创建一个空数组,因为它与传入的属性值不匹配。 另外,我可以有多个boxedCharaters和其他同名的键。

function genNewArray(jsonArray)
 {return results.map(function(a){
 return {[jsonArray]: a[jsonArray]}
 })
}

var i = genArray(‘singleLine’)

关于如何访问这些值的更好的想法?

4 个答案:

答案 0 :(得分:0)

$.each(a, function(entryIndex, entry) {
  $.each(this.singleLine, function() { 
    alert(this.text); 
  }); 
 });

答案 1 :(得分:0)

在第一种情况下,由于console.log(value.singleLine.text),它失败了。由于该数组还有一个名为key的{​​{1}},并且当项boxedCharactersforEach内,{ boxedCharacters: { text: '1040043' } },找不到value.singleLine。所以它会失败



var a = [{
    boxedCharacters: {
      text: '1040043'
    }
  },
  {
    singleLine: {
      text: '東京都中央区日本橋新古町'
    }
  },
  {
    singleLine: {
      text: 'この度は、数多くのお店の中から当店を'
    }
  }, {
    singleLine: {
      text: 'お選びご来店頂きまして誠にありがとう'
    }
  }
]

a.forEach(function(value) {
  if (value.singleLine) {
    console.log(value.singleLine.text)
  }

})




答案 2 :(得分:0)

您可以尝试以下方法:



    const a = [ 
      { boxedCharacters: { text: '1040043' } },
      { singleLine: { text: '東京都中央区日本橋新古町' } },
      { singleLine: { text: 'この度は、数多くのお店の中から当店を'} },
      { singleLine: { text: 'お選びご来店頂きまして誠にありがとう'} }
    ];

    const getSingleLine = o => (o&&o.singleLine);
    const getText = o => (o&&o.text);
    const getSingleLineText = o => getText(getSingleLine(o))

    console.log(
      a.map(getSingleLineText)
      .filter(x=>!!x)//remove undefined
    )




或者你可以将对象减少到值,如果值不存在则返回undefined:

const tryGet = keys => object =>
  keys.reduce(
    (o,key)=>
      (o!==undefined && o[key]!==undefined)
        ? o[key]
        : undefined,
    object
  );

const getSingleLineText = tryGet(["singleLine","text"]);

console.log(
  a.map(getSingleLineText)
  .filter(x=>!!x)//remove undefined
);

答案 3 :(得分:0)

您只需要测试singleLine是否有值..

a.forEach(function(value){
  if(a.singleLine) console.log(value.singleLine.text)
})