Как получить массив и скопировать в другой - PullRequest
0 голосов
/ 05 августа 2020

Всем привет В моем проекте есть модель. Он возвращает все значения в массиве.

    let DATA = {
    result: [
        { id: 1, name: 'test', data: '2001-01-01', status: STATUS_OPEN },
        { id: 2, name: 'test', data: '2001-01-01', status: STATUS_IN_PROCESS },
    ]
}
export function getAllA () {
    return (new Promise(function (resolve, reject) {
        resolve(DATA.result)
    }))
}

Мне нужно скопировать массив, возвращаемый этим методом, в массив «arr». Я делаю это:

    let arr = []
    getAllA().then((item)=>{
    arr = item.slice()})

Это не ' t copy.Подскажите, в чем проблема? Как это исправить?

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Если вы хотите скопировать объект, это немного сложнее. Пожалуйста, не обращайте внимания на то, что JSON .parse ... JSON .stringify подход НЕ БУДЕТ работать в некоторых случаях (например, функции или экземпляры объектов)

вы, вероятно, должны проверить loda sh, если можете. . у него есть очень изящная функция клонирования инструментов:

https://lodash.com/docs/#cloneDeep

Если вас не интересуют мелкие клоны, то самым быстрым и лучшим подходом будет использование Array. from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

Читать на javascript мелкое копирование: https://we-are.bookmyshow.com/understanding-deep-and-shallow-copy-in-javascript-13438bad941c?gi=42d71cd90591

0 голосов
/ 05 августа 2020

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

(вам следует позаботиться, в этом примере используется shallow copy, поскольку массив содержит объекты, ссылки все равно останутся между оригиналом и копией)

const data = {
  result: [{
      id: 1,
      name: 'test',
      data: '2001-01-01',
      status: 'STATUS_OPEN'
    },
    {
      id: 2,
      name: 'test',
      data: '2001-01-01',
      status: 'STATUS_IN_PROCESS'
    },
  ]
}

function getAllA() {
  return Promise.resolve(data.result);
}

(async () => {
  const arr = await getAllA()
    .then((item) => /* shallow copy */ [...item]);
    
  // use the array here
  console.log(arr);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...