【问题标题】:How to find item from an object with Javascript?如何使用 Javascript 从对象中查找项目?
【发布时间】:2014-02-26 17:37:32
【问题描述】:

我有我的数据对象:

var elements = {
        'element' : {
            'name' : 'test',
                    'price' : '55'
        },
        'element' : {
            'name' : 'letev',
                    'price': '223'
        }
    };

现在,我不知道如何通过名称找到每个 元素。 我需要通过名称测试找到元素,然后访问它的其他参数(价格,..)

【问题讨论】:

  • 这个对象是不可能的。键名必须是唯一的。

标签: javascript arrays


【解决方案1】:

您必须将元素更改为数组:

var elements = [
    {
        'name' : 'test',
        'price' : '55'
    },
    {
        'name' : 'letev',
        'price': '223'
    }
];

function findElementByName(name, elementsForSearch) {
    if (name) {
        elementsForSearch.filter(function(elem){
            return elem.name === 'name';
        });
        return elementsForSearch[0];
    }
    return {};
}

alert(findElementByName('test', elements).name)

【讨论】:

  • 使用Array.filter。它更容易维护。
  • 是的,谢谢,它是 ES 5.1,但检查了它是否支持(IE9+ 和现代)。我想我可以使用它:)
【解决方案2】:

假设你的对象是一个数组而不是你使用的语法:

var elements = [
    {
        'name' : 'test',
        'price' : '55'
    },{
        'name' : 'letev',
        'price': '223'
    }
];

你可以像这样filter元素出来:

searchName = 'test';
elements.filter(function(element){
    return element.name == searchName;
});

这只会返回名称为'test' 的元素。

或者作为一个函数:

function filterByName(array, namr){
    array.filter(function(element){
        return element.name == name;
    });
}

这样称呼:

array result = filterByName(elements, 'test');

如果您需要支持 IE 8 或更低版本,您可以使用polyfill 代替Array.prototype.filter

【讨论】:

    【解决方案3】:

    如果你的 elements 对象是一个数组,你可以这样做,即

    var elements = [{
            'element' : {
                'name' : 'test',
                        'price' : '55'
            },
            'element' : {
                'name' : 'letev',
                        'price': '223'
            }
        }];
    
    var price;
    for (var i=0; i  <elements.length; i++) { 
        if (elements[i].name === 'test') {
            price = elements[i].price;
            break;
        }
    }
    

    【讨论】:

      【解决方案4】:

      尝试:

      var elements = [
        {
          'name' : 'test',
          'price' : '55'
        },
        {
          'name' : 'letev',
          'price': '223'
        }
      ];
      
      var search = 'letev';
      for (var i = 0; i < elements.length; i++) {
        if (elements[i].name == search) {
          alert('found!');
          break;
        }
      }
      

      或者使用Array.filter:

      var search = 'letev';
      var output = elements.filter(function(element) {
        return element.name == search;
      });
      

      【讨论】:

      • 使用 Array.filter 而不是手动迭代结果。
      【解决方案5】:

      试试这个

      var List= (JObject)JsonConvert.DeserializeObject(jsonstring);
          var result= List["element"].Children().Select(node => node["name"]== "Test").ToList();
      

      【讨论】:

        猜你喜欢
        • 2018-10-11
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        相关资源
        最近更新 更多