Извлечение данных из объекта в javascript

#javascript

#javascript

Вопрос:

У меня есть объект с именем ItemData, который состоит из других свойств. Я хотел бы извлечь из него только пронумерованные элементы. ниже приведен текст ItemData . Я пытался использовать map, но он выдает ошибку, в которой говорится, что ItemData является объектом. Я могу использовать item[0] и item[1], но в объекте будет много массивов. Существует ли структурный способ извлечения элементов 0 и 1.

ItemData

 {
  0: { "daysIn": "2", "daysOut": "3", "category": "Day Shift" },
  1: { "daysIn": "5", "daysOut": "6", "category": "Day Shift" },
  type: "Fixed Multiple", 
  Status: "Active"
}
 

Комментарии:

1. Здесь нет «массива». '0' и '1' являются просто ключами объекта, а не индексами массива. Вы могли бы искать все ключи, которые являются числами, и создавать массив на основе этого.

Ответ №1:

У вас нет массива, но вы можете перебирать ключи, которые являются числами, и создавать массив из этих значений.

 const ItemData = {
  0: {
    "daysIn": "2",
    "daysOut": "3",
    "category": "Day Shift"
  },
  1: {
    "daysIn": "5",
    "daysOut": "6",
    "category": "Day Shift"
  },
  type: "Fixed Multiple",
  Status: "Active"
}

function getArray(obj) {
  const result = [];
  const keys = Object.keys(obj);
  for (const k of keys) {
    if (Number(k) == k) {
      result[k] = obj[k];
    }
  }
  return resu<
}

const arr = getArray(ItemData);
console.log(arr); 

Ответ №2:

Попробуйте это….

 var obj = {
      0: { "daysIn": "2", "daysOut": "3", "category": "Day Shift" },
      1: { "daysIn": "5", "daysOut": "6", "category": "Day Shift" },
      type: "Fixed Multiple", 
      Status: "Active"
    }
    var result = Object.keys(obj).map((key) => [key, obj[key]]);
    
    console.log(result);
 

Ответ №3:

 let obj={0:{daysIn:"2",daysOut:"3",category:"Day Shift"},1:{daysIn:"5",daysOut:"6",category:"Day Shift"},type:"Fixed Multiple",Status:"Active"};

let result = Object.entries(obj)
              .filter(e => Number.isInteger( e[0]))
              .map(([_,v]) => v)
              
              
console.log(result) 

Ответ №4:

вы можете превратить его в массив и перебирать его, чтобы вернуть то, что вы хотите. Я бы использовал reduce, поскольку вы можете настроить, что и как вы возвращаете данные.

 Object.keys(ItemData).reduce((accumlated, current) => {
    if (Number(current)) {
        accumlated[current] = ItemData[current];
    }
    return accumlated
}, {});
 

это вернет объект, состоящий только из свойств, которые пронумерованы.

если вы хотите, чтобы они возвращались в массиве, вы можете просто изменить начальное значение для уменьшения

 Object.keys(ItemData).reduce((accumlated, current) => {
    if (Number(current)) {
        accumlated.push(ItemData[current]);
    }
    return accumlated
}, []);