如何在JavaScript或jQuery中过滤JSON数据?

Me7*_*888 53 javascript jquery json

如何使用Javascript或jQuery过滤JSON数据?

这是我的JSON数据:

[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

obj1 = JSON.parse(jsondata);
Run Code Online (Sandbox Code Playgroud)

现在我只想要包含网站的名称和网站数据等于"雅虎"

Roy*_*mir 59

这是你应该这样做的:(谷歌查找)

$([
  {"name":"Lenovo Thinkpad 41A4298","website":"google222"},
  {"name":"Lenovo Thinkpad 41A2222","website":"google"}
  ])
    .filter(function (i,n){
        return n.website==='google';
    });
Run Code Online (Sandbox Code Playgroud)

更好的解决方案:(萨尔曼)

$.grep( [{"name":"Lenovo Thinkpad 41A4298","website":"google"},{"name":"Lenovo Thinkpad 41A2222","website":"google"}], function( n, i ) {
  return n.website==='google';
});
Run Code Online (Sandbox Code Playgroud)

http://jsbin.com/yakubixi/4/edit

  • 这只是示例目的......所以不要检查syntex是否有效..只给我问题解决方案:( (2认同)

Ole*_*leg 22

除非您针对旧浏览器并且不想使用填充程序,否则不需要jQuery.

var yahooOnly = JSON.parse(jsondata).filter(function (entry) {
    return entry.website === 'yahoo';
});
Run Code Online (Sandbox Code Playgroud)

在ES2015中:

const yahooOnly = JSON.parse(jsondata).filter(({website}) => website === 'yahoo');
Run Code Online (Sandbox Code Playgroud)

  • 我认为它实际上**被**广泛支持(旧版IE在XP上运行,无论如何都已停止).因此链接.此外,包括一个垫片比包含整个jQuery要好得多. (3认同)
  • 他从不说他已经在页面上有jQuery.问题是JavaScript**或**jQuery.无论如何,jQuery本身就是多余的. (3认同)
  • 过滤器没有广泛的支持(正如你所提到的) (2认同)

ave*_*nda 18

试试这种方式,让您甚至可以通过其他键进行过滤

数据:

var my_data = [{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}];
Run Code Online (Sandbox Code Playgroud)

用法:

//We do that to ensure to get a correct JSON
var my_json = JSON.stringify(my_data)
//We can use {'name': 'Lenovo Thinkpad 41A429ff8'} as criteria too
var filtered_json = find_in_object(JSON.parse(my_json), {website: 'yahoo'});
Run Code Online (Sandbox Code Playgroud)

过滤功能

function find_in_object(my_object, my_criteria){

  return my_object.filter(function(obj) {
    return Object.keys(my_criteria).every(function(c) {
      return obj[c] == my_criteria[c];
    });
  });

}
Run Code Online (Sandbox Code Playgroud)


Ena*_*yat 8

以下代码对我有用:

var data = [{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]

var data_filter = data.filter( element => element.website =="yahoo")
console.log(data_filter)
Run Code Online (Sandbox Code Playgroud)

  • 此代码不会按“雅虎”过滤数据。它将它们全部更改为“雅虎”。问题是如何获取网站等于“雅虎”的数据。 (2认同)
  • @probitaille 感谢您的提醒。我更正了代码。 (2认同)