Использование оператора if в выражении функции array.forEach для выбора подобъекта в массиве объектов - PullRequest
0 голосов
/ 21 декабря 2018

Я не могу заставить оператор if работать внутри функции, вызываемой циклом массива forEach.

У меня есть массив с объектами (с объектом)

arrofobj = [   
{"thing_id":"1a", "val": 1, "Type": "Switch","ValType":{"0":"Open","1":"Closed"}},  
{"thing_id":"1b", "val": 72, "Type": "Sensor","ValType":{"0":"%"}}]

Я хотел бы проверить, является ли Type переключателем, чтобы записать информацию в новое полеобъектов массива CatX:
- когда это так, я хочу использовать значение val, чтобы определить, какой элемент ValType использовать в новой переменной массива arrofobj.
-если нет, я хочу использовать значение arrofobj.ValType.0

const getCat = function(){
    if(arrofobj.Type !== 'Switch') 
        arrofobj.ValType'.0' 
    } else {
        arrofobj.ValType.(arrofobj.val)
};

arrofobj.forEach(p => p.CatX = getCat() ); 

Я не получаю письмо, чтобы принять код, поэтому не могу проверить.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Просто добавьте к ответу Шилли:

1) В долгосрочной перспективе, если это данные, которые вы создаете сами, а не что-то из сторонней конечной точки, вы найдете стандартизацию форматаимен ключей свойств вашего объекта (в camelCase), чтобы с ними было легче работать.Он не будет содержать столько ошибок в вашем коде, если они будут одинаково отформатированы.

2) Вы можете использовать объект деструктурирующее присвоение и троичный оператор для сокращениякодовый след немного.

const arrofobj = [
  { id: '1a', val: 1, type: 'Switch', valType: { '0': 'Open', '1': 'Closed' } },
  { id: '1b', val: 72, type: 'Sensor', valType: { '0': '%' } }
];

function getCat(obj) {

  // Deconstruct the properties from obj
  const { type, valType, val } = obj;

  // Use a ternary operator to decide what to return
  return type === 'Switch' ? valType[val] : valType['0'];
}

arrofobj.forEach(obj => {
   obj.catX = getCat(obj);
});

console.log(arrofobj);
0 голосов
/ 21 декабря 2018

1) Вы должны использовать скобки для доступа к свойствам в виде строк.

2) Вы должны закрывать скобки, если / еще правильно.

3) Вы должны что-то вернутьизнутри getCat есть что-то, что можно назначить для p.CatX

4) Вы должны отправить объект getCat внутри цикла.

const arrofobj = [   
  {"thing_id":"1a", "val": 1, "Type": "Switch","ValType":{"0":"Open","1":"Closed"}},  
  {"thing_id":"1b", "val": 72, "Type": "Sensor","ValType":{"0":"%"}}
];
const getCat = function( obj ){
    if(obj.Type !== 'Switch') {
        return obj.ValType[ '0' ]
    } else {
        return obj.ValType[ obj.val ];
    }
};

arrofobj.forEach(p => {
  p.CatX = getCat(p);
}); 

console.log( arrofobj );
...