【问题标题】:Getting a list of objects that have a specific propery [duplicate]获取具有特定属性的对象列表[重复]
【发布时间】:2013-01-28 02:19:40
【问题描述】:

我有一个名为playerResults 的数组,每个索引都是一个玩家姓名,每个索引都是一个playerObj 对象。每个玩家都有一个属性name 和bracket。

有没有办法搜索playerResults 并返回所有具有特定括号编号的对象?

我正在使用 javascript 和 jquery。

编辑:这是代码:

        function showBracket(groupID) {
        //console.log(playerResults);
        var matching = playerResults.filter(function(player) {
            console.log(player.bracket);
            return player.bracket == 1; // or so
        });            

我的 playerResults 如下所示:

console.log(playerResults)
[Tiger Woods: playerObj, Phil Mickelson: playerObj, Dustin Johnson: playerObj, Zach Johnson: playerObj, Brandt Snedeker: playerObj…]
Brandt Snedeker: playerObj
    addWin: function addWin() {
    bracket: 3
    getBracket: function getBracket() {
    getWins: function getWins() {
    name: "Brandt Snedeker"
    setBracket: function setBracket(bracketNumber) {
    wins: 0
    __proto__: playerObj
Charles Howell III: playerObj
Dustin Johnson: playerObj
Hunter Mahan: playerObj

抱歉给我带来了混乱,希望这有点道理。

【问题讨论】:

  • 首先,您能否提供一些带有您的对象的示例代码 - 代码总是比代码描述更清晰。其次,你说你想通过“组号”来识别对象,但没有提到这是在哪里定义的。
  • 是的,我正在阅读那个。我确定这是因为我对此有点陌生,但是如果我手动定义对象,我如何给它我需要的所有方法?现在我只是创建一个 playername|bracket 数组,然后分解它们,设置 playerResults[playerName]=new playerObj(playerName,bracket)

标签: javascript jquery arrays search object


【解决方案1】:

你要找的是filter array method:

var matching = playerResults.filter(function(player) {
    return isSpecificGroupNumber(player.name, player.bracket); // or so
});

但是,旧浏览器不支持此方法,如果您想支持它们,可能需要填充。或者使用jQuery.grep。

【讨论】:

  • 我试过这个,并从其他地方搜索 grep,但没有返回任何内容。有什么调试它的建议吗?我尝试在过滤器函数中使用 console.log(player),但没有返回任何内容。
  • 听起来你的playerResults数组是空的,否则回调函数会被调用。你能show我们你的代码吗?
【解决方案2】:

您可以编写自己的函数来执行此操作,但我会推荐 underscore.js,这是一个引入类似 LINQ 的投影和映射函数的库。

安装后,您可以使用过滤器功能“查询”数组:

var playerResults = [
    { name: "blah", bracket:"one"},
    { name: "blah2", bracket:"three"},
    { name: "blah3", bracket:"two"},
    { name: "blah4", bracket:"one"}
];
var bracketOne = _.filter(playerResults, function(o) {
    return o.bracket == "one";
}); 

我已经为你准备了一个 jsFiddle:

http://jsfiddle.net/ye9kd/

在处理数组和对象时,下划线中有很多有用的函数 - _.filter() 只是其中之一。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 2022-06-11
    • 2019-04-29
    • 2020-10-25
    • 1970-01-01
    • 2021-06-11
    • 2018-07-20
    • 2017-10-09
    • 2016-02-03
    相关资源
    最近更新 更多