как получить доступ к вложенному массиву JSON

1

Я пытаюсь получить доступ к данным в следующем массиве, но у меня проблемы с использованием.forEach. Я хочу получить доступ ко всем singleLine.text но это не позволит мне. Я предполагаю, что на одном уровне есть несколько отдельных линий.

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

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

Я пробовал это, но это не лучшее решение, так как он создаст пустой массив для boxedCharacters, потому что он не будет соответствовать переданному значению свойства. Кроме того, я мог бы иметь несколько boxedCharaters и другие ключи с тем же именем.

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

var i = genArray(‘singleLine)

Любые лучшие идеи о том, как я могу получить доступ к ценностям?

  • 0
    Возможный дубликат объектов Access / process (вложенных), массивов или JSON
  • 1
    Ваш первый пример в порядке. Вы просто должны учитывать тот факт, что не каждый объект имеет свойство singleLine .
Показать ещё 2 комментария
Теги:

4 ответа

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
    )

Или вы могли бы уменьшить объект до значения, и если значение не существует, возврат не определен:

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
);
  • 0
    Спасибо! Это работает отлично!
0

В первом случае это происходит из-за этого console.log(value.singleLine.text). Поскольку массив также имеет key именем boxedCharacters и внутри forEach когда элемент { 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)
  }

})
  • 0
    На самом деле, когда я делаю это, это работает. Так что я не думаю, что это связано с проблемой BoxedCharacters, но спасибо за ответ. Действительно помог мне лучше понять массивы обработки a.forEach (function (value) {console.log (value.singleLine)})
0

Вам просто нужно проверить, есть ли значение для singleLine или нет.

a.forEach(function(value){
  if(a.singleLine) console.log(value.singleLine.text)
})
0
$.each(a, function(entryIndex, entry) {
  $.each(this.singleLine, function() { 
    alert(this.text); 
  }); 
 });
  • 0
    Дайте некоторое объяснение вашего ответа. Не просто почтовый индекс, дать человеческий контекст.
  • 0
    Нет абсолютно никакой необходимости включать большую библиотеку, чтобы просто перебирать массивы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню