如何从在子对象中具有特定属性的对象创建数组

时间:2019-10-14 10:21:56

标签: javascript

假设有一个物体:

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,
  }
}

我想创建一个数组,其中将包含具有id属性的对象的required。因此,在这种情况下,数组将为:

['first', 'second']

该怎么做?

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>

2 个答案:

答案 0 :(得分:3)

使用Object.values获取obj的所有值。然后,您只需使用filtermap即可获得所需的结果。

您还可以使用reduce在单个循环中执行此操作。

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);

答案 1 :(得分:0)

我强烈建议塞巴斯蒂安·西蒙(Sebastian Simon)提供建议。但是,如果您正在寻找复制粘贴的东西,请使用以下功能。将您的对象作为函数参数传递。

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;
}