Цикл через свойства в объекте JavaScript с помощью Lodash


можно ли перебирать свойства в объекте JavaScript? Например, у меня есть объект JavaScript, определенный следующим образом:

myObject.options = {
  property1: 'value 1',
  property2: 'value 2'
};

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

5 87

5 ответов:

да можно и лодаш не нужен... то есть

for (var key in myObject.options) {
  // check also if property is not inherited from prototype
  if (myObject.options.hasOwnProperty(key)) { 
    var value = myObject.options[key];
  }
}

Edit: принято отвечать (_.forOwn ()) должно быть https://stackoverflow.com/a/21311045/528262

использовать _.forOwn().

_.forOwn(obj, function(value, key) { } );

https://lodash.com/docs#forOwn

отметим, что forOwn проверки hasOwnProperty, как это обычно требуется при циклическом переборе свойств объекта. forIn не делает эту проверку.

для вашего заявленного желания "проверить, существует ли свойство" вы можете напрямую использовать lo-Dash's has.

var exists = _.has(myObject, propertyNameToCheck);

в ES6 также можно перебирать значения объекта с помощью for..of петли. Однако это не работает прямо из коробки для объектов JavaScript, поскольку вы должны определить свойство @@iterator для объекта. Это работает следующим образом:

  • The for..of цикл запрашивает "объект для итерации" (назовем его obj1 для объекта итератора. Цикл выполняет итерацию над obj1 путем последовательного вызова метода next() на предоставленном объекте итератора и использования возвращаемое значение как значение для каждой итерации цикла.
  • объект итератора получается путем вызова функции, определенной в свойстве @@iterator или символе.свойство итератора, of obj1. это функция, которую вы должны определить сами, и она должна возвращать объект итератора

вот пример:

const obj1 = {
  a: 5,
  b: "hello",
  [Symbol.iterator]: function() {
    const thisObj = this;
    let index = 0;
    return {
      next() {
        let keys = Object.keys(thisObj);
        return {
          value: thisObj[keys[index++]],
          done: (index > keys.length)
        };
      }
    };
  }
};

теперь мы можем использовать for..of петли:

for (val of obj1) {
  console.log(val);
}    // 5 hello

было бы полезно понять, почему вам нужно сделать это с lodash. Если вы просто хотите проверить, существует ли ключ в объекте, вам не нужен lodash.

myObject.options.hasOwnProperty('property');

Если вы ищете, чтобы увидеть, если значение Существует, вы можете использовать _.invert

_.invert(myObject.options)[value]