0

Let's say there is an object:

var obj = {
    filed1: {
    id: 'first',
    order: 3,
    rules: {
        required: true,
        minlength: 5
    }
  },
  filed2: {
    id: 'second',
    order: 2,
    rules: {
        required: true
    }
  },
  filed3: {
    id: 'third',
    order: 1,
  }
}

I want to create an array which will contain the id of object who has required property. So, in this case the array will be:

['first', 'second']

How to do this?

var obj = {
    filed1: {
    id: 'first',
    order: 3,
    rules: {
        required: true,
        minlength: 5
    }
  },
  filed2: {
    id: 'second',
    order: 2,
    rules: {
        required: true
    }
  },
  filed3: {
    id: 'third',
    order: 1,
  }
}

var arr = [];

/*for (key in obj) {
  if obj.hasOwnProperty(required) {
    var ids = 
    arr.push(ids);
  }
}*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Scott Marcus
  • 64,069
  • 6
  • 49
  • 71
user1896653
  • 3,247
  • 14
  • 49
  • 93
  • 2
    Familiarize yourself on [how to access and process nested objects, arrays or JSON](https://stackoverflow.com/q/11922383/4642212) and use the available [`Object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#Methods_of_the_Object_constructor) and [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Methods) methods. – Sebastian Simon Oct 14 '19 at 10:23
  • thanks! I'll go through the link. – user1896653 Oct 14 '19 at 15:27

2 Answers2

3

Get all the values of obj using Object.values. Then you can just use filter and map to get the desired result.

You can also use reduce to do this in a single loop.

var obj = {
  filed1: {
    id: 'first',
    order: 3,
    rules: {
      required: true,
      minlength: 5
    }
  },
  filed2: {
    id: 'second',
    order: 2,
    rules: {
      required: true
    }
  },
  filed3: {
    id: 'third',
    order: 1,
  }
};

const result = Object.values(obj)
  .filter(val => (val.rules || {}).required)
  .map(val => val.id);

console.log(result);
31piy
  • 23,323
  • 6
  • 47
  • 67
0

I strongly recommend suggestion provided by Sebastian Simon. But If you are looking for something copy paste, please use following function. Pass your object as function parameter.

function getRequiredIds(obj) {
  var ids = [];
  for (var key in obj) {
    if (obj[key]["rules"] && obj[key]["rules"]["required"])
      ids.push(obj[key]["id"]);
  }
  return ids;
}