javascript主干的json对象上类似lambda的匹配?

javascript主干的json对象上类似lambda的匹配?,javascript,json,backbone.js,lambda,Javascript,Json,Backbone.js,Lambda,不是前端SME…是否存在与此java 8 lambda相当的javascript或主干(u)而不是在JSON数组上循环并匹配“类型”?: 假设您希望遍历数组并仅返回具有给定类型的对象,我建议如下: 对于单次或少量使用,您只需创建声明所选类型的函数: function isThing(jsonObject) { return jsonObject.type === "THIS_THING"; } 或者为了避免硬编码: var THING_TYPE = "THIS_THING"; fun

不是前端SME…是否存在与此java 8 lambda相当的javascript或主干(u)而不是在JSON数组上循环并匹配“类型”?:


假设您希望遍历数组并仅返回具有给定类型的对象,我建议如下:

对于单次或少量使用,您只需创建声明所选类型的函数:

function isThing(jsonObject) {
    return jsonObject.type === "THIS_THING";
}
或者为了避免硬编码:

var THING_TYPE = "THIS_THING";
function isThing(jsonObject) {
    return jsonObject.type === THING_TYPE;
}
然后,您可以使用数组的
filter
方法将此函数应用于数组

var filteredList = completeList.filter(isThing);
filter
,如MDN中所述,将函数作为参数,并将其应用于数组中的每个元素。如果函数返回
true
,则元素将添加到新数组中。传递的函数应用于每个元素后,
filter
函数返回新数组

如果您只是在寻找一种或两种类型,上述选择可能是实用的。但是,如果您有许多类型,您可能需要过滤器,您应该考虑略去这一点,如:

function createFilterWithType(desiredType) {
    // will return true if jsonObject is of desired type
    var typeAsserter = function (jsonObject) {
        return jsonObject.type === desiredType;
    }

    return typeAsserter;
}


// Create functions that assert if object is given type    
var isThisThingType = createFilterWithType("THIS_THING");
var isOtherThingType = createFilterWithType("OTHER_THING");

// Data
var completeList = [
   {type:"THIS_THING", id:0},
   {type:"OTHER_THING", id:1}
];

// Data filtered by applying asserters to completeList
var thingTypeList = completeList.filter(isThisThingType);
// returns [{type:"THIS_THING", id:0}]

var otherTypeList = completeList.filter(isOtherThingType);
// returns [{type:"OTHER_THING", id:1}]
或者,您可以创建Asserter并在单个步骤中应用:

var thingTypeList = completeList.filter(createFilterWithType("THIS_THING"));
var otherTypeList = completeList.filter(createFilterWithType("OTHER_THING"));

虽然这样做会删除几行代码,但是会降低性能,因为每次调用
filter
都需要创建匿名断言函数。更糟糕的是,以这种方式压缩代码会使推理变得更加困难。

obj.things.filter(函数(el){return el.type==type})[0]|null
谢谢。因此,给定解决方案#1…并且我有一个列表/数组…如何将其传递到createFilterWithType()函数中?感谢您的澄清。我将更新我的回复,以更好地举例说明如何使用闭包创建和应用匿名函数。此外,考虑到用例要求,因为闭包是唯一的,所以这个东西只包含一次……这会改变什么吗?i、 我知道数组中只有一个,所以只需获得第一个匹配项(如lambda)。
function createFilterWithType(desiredType) {
    // will return true if jsonObject is of desired type
    var typeAsserter = function (jsonObject) {
        return jsonObject.type === desiredType;
    }

    return typeAsserter;
}


// Create functions that assert if object is given type    
var isThisThingType = createFilterWithType("THIS_THING");
var isOtherThingType = createFilterWithType("OTHER_THING");

// Data
var completeList = [
   {type:"THIS_THING", id:0},
   {type:"OTHER_THING", id:1}
];

// Data filtered by applying asserters to completeList
var thingTypeList = completeList.filter(isThisThingType);
// returns [{type:"THIS_THING", id:0}]

var otherTypeList = completeList.filter(isOtherThingType);
// returns [{type:"OTHER_THING", id:1}]
var thingTypeList = completeList.filter(createFilterWithType("THIS_THING"));
var otherTypeList = completeList.filter(createFilterWithType("OTHER_THING"));