как зациклить массив объектов и получить значения

1

Пожалуйста, прочитайте полностью. Не отмечайте его дубликат, пока вы его не найдете. У меня есть массив объектов, как показано ниже.

const filterParams = [
      { 'waterfront_type[]': 'Cove' },
      { 'area[]': 'Applehead Island' },
      { 'waterfront_type[]': 'Channel' },
      { 'waterfront_type[]': 'Open Water' },
      { baths: '0 - 14' },
      { price: '0.00 - 9,876,100.00' }
    ];

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

filterParams.map(param => {
      return formData.append(param.key, param.value);
    });

Ожидается: param.key - waterfront_type [], а param.value - Cove. поэтому внутренне он должен быть formData.append('waterfront_type[]', 'Cove');

Получение: оба не определены. formData.append(undefined, undefined);

  • 0
    Expected: param.key is waterfront_type[] почему вы ожидаете этого?
  • 0
    И зачем вы вообще используете .map , если все, что вам нужно - это циклически проходить по массиву?
Показать ещё 2 комментария
Теги:
arrays

4 ответа

3

Вы можете использовать Object.entries() и destructuring массива, чтобы получить ключ и значение.

Примечание: default = [] обрабатывает случай пустых объектов.

filterParams.map(param => {
  const [[key, value] = []] = Object.entries(param);
  return formData.append(key, value);
});

Если вам просто нужно вызвать formData(key, value), и вам не нужны возвращенные значения (если они есть), используйте Array.forEach() вместо Array.map():

filterParams.forEach(param => {
  const [[key, value] = []] = Object.entries(param);
  formData.append(key, value);
});
0

вы можете использовать фильтры javascript

 filterParams = filterParams.filter(function(itm){
   Object.keys(itm).forEach(function(key, value){
     return formData.append(key, value);
   })
 })
  • 1
    Зачем использовать .filter если все, что вам нужно, это .filter массив?
  • 0
    перебирая массив или используя фильтры javascript, я думаю, что оба должны быть одинаковыми. в любом случае вы выполняете итерацию по этому массиву, что не имеет значения, используете ли вы фильтр, карту или простую итерацию цикла. сложность итерации будет такой же. Спасибо
Показать ещё 6 комментариев
0

Таким образом, вы хотите поместить весь словарь entrySet в FormData:

filterParams.forEach(param => {
    Object.keys(param).forEach(function(key) {
         let value = param[key];
         formData.append(key, value);
    });      
});

Он будет производить вывод:

["waterfront_type%5B%5D=Cove",
 "area%5B%5D=Applehead%20Island",
 "waterfront_type%5B%5D=Channel",
 "waterfront_type%5B%5D=Open%20Water",
 "baths=0%20-%2014",
 "price=0.00%20-%209%2C876%2C100.00"]
0

переменная param переданная в .map является объектом javascript, и вы не можете получить доступ к ее ключам, используя только object.key. Вместо этого выполните:

filterParams.map(param => {
   var keys = Object.keys(param);
   return formData.append(keys[0], param[keys[0]]);
});

Здесь мы получаем все ключи объекта param и получаем первый (0-й индекс) в качестве необходимого ключа (при условии, что ваш массив имеет объекты с одним ключом).

Ещё вопросы

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