Ruby语法的等效Javascript / jquery

时间:2012-01-02 13:00:43

标签: javascript jquery ruby

  

可能重复:
  Find object by id in array of javascript objects

我可以这样做以从特定键具有特定值的散列数组中获取特定散列。例如,如果我想获得密钥name为2的哈希值id,我可以这样做:

array = [{:id => 1, :name => "A"}, 
         {:id => 3, :name => "C"}, 
         {:id => 2, :name => "B"}]
id_2_hash = array.detect {|a| a[:id] == 2}
=> {:id => 2, :name => "B"}
id_2_hash[:name]
=> "B"

我希望像这样对JSON对象做同样的事情:

[
  {
    'id': 1,
    'name': 'A'
  },
  {
    'id': 3,
    'name': 'C'
  },
  {
    'id': 2,
    'name': 'B'
  }
]

如何在Javascript / Jquery中执行此操作?

3 个答案:

答案 0 :(得分:1)

使用 []。filter();

    /**
     * @param {Function} fn is Callback-function
     * @param {Object} Object to use as this when executing callback
     * @link {forEach}
     * @return {Array} Creates a new array with all elements that pass the test implemented by the provided function
     * @edition ECMA-262 5th Edition, 15.4.4.20
    */
    (function($) {
        'use strict';

        if(!$.filter) {
            $.filter = function(fn, object) {
                var length = this.length,
                    array = [],
                    i = -1;

                while(i++ < length) {
                    if(i in this && fn.call(object, this[i], i, this)) {
                        array.push(this[i]);
                    }
                }
                return array;
            };
        }

    })(Array.prototype);

答案 1 :(得分:0)

var items = [
  {
    'id': 1,
    'name': 'A'
  },
  {
    'id': 3,
    'name': 'C'
  },
  {
    'id': 2,
    'name': 'B'
  }
];
console.log(items.filter(function(v) {
  return v.id == 2;
})[0].name);

更新:请注意,Array#filter无法在IE 8及更低版本上运行

答案 2 :(得分:0)

heare是一个简单的解决方案,但我确信还有更好的解决方案.. 保存到.js文件并运行。 如果您不使用Windows,请删除WScript.Echo以进行测试。 请注意,我不使用过滤器,因为在所有版本的javascript中都不支持。

var obj = [{ 
    'id': 1,
    'name': 'A'
  },
  {
    'id': 3,
    'name': 'C'
  },
  {
    'id': 2,
    'name': 'B'
  }
]

for (i=0;i<obj.length;i++){
  if (obj[i].id==2){
    WScript.Echo(obj[i].name);
  }
}