Привет мне нужно знать, что я делаю не так здесь - PullRequest
0 голосов
/ 12 октября 2019
{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}


var loop = () => {
  var arr = []
  for (var i = 0 ; i<messages.length; i ++) {
    arr.push(messages[1])
  }
  return loop()
  console.log(arr)
}

Мне нужно перебрать этот объект и получить только те сообщения, которые помещаются в новый массив

same

Ответы [ 4 ]

1 голос
/ 12 октября 2019

arr.push(messages[1])

1 должно быть i, вы получаете один и тот же индекс каждый раз

0 голосов
/ 12 октября 2019

вы можете использовать деструктуризацию, это коротко и просто.

var obj = { "messages": [
        {
            "msgFrom": "13223821242",
            "msgBody": "Hi there"
        }, {
            "msgFrom": "Bill",
            "msgBody": "Hello!"
        }
    ]
};

var arr = [...obj.messages];
console.log(arr);
0 голосов
/ 12 октября 2019

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

  1. Это недопустимоСинтаксис JS. По сути, это объект, который никогда не назначается переменной.
{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}

Удалите внешние фигурные скобки и используйте var messages = [...], чтобы установить массив в качестве переменной messages.

var messages = [{
    "msgFrom": "13223821242",
    "msgBody": "Hi there"
}, {
    "msgFrom": "Bill",
    "msgBody": "Hello!"
}]

Вы никогда не вызываете функцию анонимной стрелки, ссылка на которую loop. Вызовите его через loop().

, что приведет к бесконечному циклу, поскольку возвращаемое значение на самом деле является вызовом функции, снова и снова вызывая указанную функцию.

Вы возвращаетесь из своей функции до того, как console.log() когда-либо будет достигнут, поэтому ничего не будет зарегистрировано.

Вы должны нажать messages[i], как messages[1]всегда выдвигает второй элемент (индексы JS начинаются с нуля)

Чтобы обернуть все это, вот очищенный и работающий код (который по сути ничего не делает, так как он просто копирует всеэлементы из одного массива в другой):

var messages = [{
  "msgFrom": "13223821242",
  "msgBody": "Hi there"
}, {
  "msgFrom": "Bill",
  "msgBody": "Hello!"
}];


var loop = () => {
  var arr = []
  for (var i = 0; i < messages.length; i++) {
    arr.push(messages[i])
  }
  // return loop()
  console.log(arr)
}

loop();
0 голосов
/ 12 октября 2019

Существует несколько проблем

, если предположить, что объект имеет переменную obj

var loop = () => {
  var arr = []
  for (var i = 0 ; i< obj.messages.length; i ++) { //messages is a key of an object, so messages is undefined, it should be obj.messages.
    arr.push(messages[i]) //wrong index, you should push `i` and not 1
  }
  return arr; // loop() is a function, causing endless recursion, causing stack overflow!
  console.log(arr) // will never print since function already returns!; move before return if you want it to print
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...