javascript - 过滤数组键

标签 javascript arrays object

我有一个对象主体,我想从中获取键的值。 如何以最少的计算量获取 membershipIdserviceIduserId

我只想要数据,只是我不想使用过滤器 3 次

var body = {
  "custom_fields": [{
    "label": "membership_id",
    "data": "1",
  }, {
    "label": "service_id",
    "data": "1",

  }, {
    "label": "user_id",
    "data": "26134",
  }]
};

var membershipInfo = body.custom_fields.filter(n=>{
  return n.label == "membership_id";
});

var serviceInfo = body.custom_fields.filter(n=>{
  return n.label == "service_id";
})
var userInfo = body.custom_fields.filter(n=>{
  return n.label == "user_id";
})

var membershipId = membershipInfo[0].data;
var serviceId    = serviceInfo[0].data;
var userId       = userInfo[0].data;

console.log(membershipId,serviceId,userId);

最佳答案

...in minimum computations

嗯,重复循环数组并不是最小的。您将使用一个循环,可能是一个相当无聊的循环:

var membershipId, serviceId, userId;
var fields = body.custom_fields;
for (var i = 0, len = fields.length; i < len; ++i) {
    var entry = fields[i];
    switch (entry && entry.label) {
        case "membership_id":
            membershipId = entry.data;
            break;
        case "service_id":
            serviceId = entry.data;
            break;
        case "user_id":
            userId = entry.data;
            break;
    }
}

实例:

var body = {
    "custom_fields": [{
        "label": "membership_id",
        "data": "1",
    }, {
        "label": "service_id",
        "data": "1",

    }, {
        "label": "user_id",
        "data": "26134",
    }]
};

var membershipId, serviceId, userId;
var fields = body.custom_fields;
for (var i = 0; i < fields.length; ++i) {
    var entry = fields[i];
    switch (entry && entry.label) {
        case "membership_id":
            membershipId = entry.data;
            break;
        case "service_id":
            serviceId = entry.data;
            break;
        case "user_id":
            userId = entry.data;
            break;
    }
}

console.log(membershipId, serviceId, userId);

并不令人兴奋,但你说“以最少的计算量”。 :-)

这不是最简洁的方式,但它可能是运行时最高效的方式。您可以进行的调整:

  • 如果你知道永远不会有 nullundefined条目,您可以删除 entry &&参与switch

  • 如果有很多条目与任何情况都不匹配,如果您已获得所需的全部内容,您可能会提前停止

关于javascript - 过滤数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706105/

相关文章:

java - 从正则表达式在 Android 中创建对象

javascript - 按 "date"以 YYYY/MM/DD 格式过滤 javascript 对象列表

javascript - 缺少类属性转换 react

php - PDO:使用增量键在 MySQL 中插入数组

javascript - 如何使用 jquery 切换所有子元素的只读属性

c - C中删除动态数组的元素

javascript - 如何获取 JS 对象中的最后一个属性值

php - 取消设置对象 PHP 的所有实例

javascript - location.href 不在 jquery 事件中重定向

javascript - 使用 jQuery 进行多级 JSON