如果它包含JavaScript中的字母,如何返回对象

时间:2014-09-29 22:27:00

标签: javascript json underscore.js lodash

我在这里绞尽脑汁,需要一些快速的帮助。

我有以下JSON对象:

"product": {
    "diagnostics": null,
        "skus": [{
            "itemCode": "Q28988",
            "salesCode": "Q2898800",
            "listPrice": 22,
            "salePrice": 22,
            "numberOfBottles": 1,
            "salePricePerBottle": 22,
            "id": "esku580806",
            "vppApplier": false,
            "vppPrice": null,
            "vppDiscountPct": null
        }, {
            "itemCode": "C28988",
            "salesCode": "C2898800",
            "listPrice": 264,
            "salePrice": 264,
            "numberOfBottles": 12,
            "salePricePerBottle": 22,
            "id": "esku580811",
            "vppApplier": false,
            "vppPrice": null,
            "vppDiscountPct": null
        }],
            "id": "eprod440905",
}

我需要过滤skus数组,只返回以字母“Q'”开头的itemCodes。我使用下划线和JavaScript,这是我能得到的最接近的,但它似乎没有返回任何东西。

var codes = _.filter($scope.cb.recommendations, function(obj){
            var startLetter = obj.product.skus.slice(); 
            return startLetter[0] === 'Q';
        });

$ scope.cb.recommendations是JSON对象 - 上面的代码片段。非常感谢!

2 个答案:

答案 0 :(得分:1)

您没有解释$scope.cb.recommendations是什么,因此我将展示如何过滤一个产品的skus数组。诀窍是将第三个参数传递给_.filter,它在谓词函数中绑定到this

var codes = [];
_.filter(
    obj.product.skus,
    function(sku) {
        if (sku.itemCode[0] === 'Q') {
            this.push(sku.itemCode);
        }
    },
    codes
);

答案 1 :(得分:0)

没有下划线,只有1' Q-item'可能存在:

function findQ(skus) {
  var len = skus.length; 
  while(len--) {
    if(skus[len].itemCode.indexOf('Q') === 0) 
        return skus[len];
  }
}

var item = findQ(json.product.skus);

http://jsfiddle.net/8pb13cdj/