【问题标题】:Finding a particular value in a Javascript object在 Javascript 对象中查找特定值
【发布时间】:2013-09-25 20:15:13
【问题描述】:

我谦虚地请求帮助。我正在做一个项目,我需要设置一个搜索来查找所有实例,在一个特定值等于用户正在搜索的任何术语的对象内。我找到了以下代码:

    function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}

here(以确保给予适当的信任),效果很好,但我正在寻求一些帮助来扩展此代码的功能以包括一次搜索多个元素的能力,并且此外,在返回时,显示正在返回的相同对象中的其他值。例如,使用上面的代码,返回只是 [Object]:

我希望做的是在 [>Object] 中附加来自 Object 的另一个变量值,可能是 ID 或 Description,它们都是返回结果的一部分。因此,所需的结果将类似于“Object: ID=b01”或“Object: Desc = This is Maple”,这将使我的用户能够快速查看他们需要查看的结果之一。

提前感谢您的帮助!

【问题讨论】:

  • 研究使用 jsonpath
  • 因此,如果他们一次可以搜索多个元素,如果匹配所有元素或任何元素,该对象是否会被添加到对象数组中?
  • 对不起,应该更具体。如果他们在搜索中有多个元素,那么它将是 AND 而不是 OR,所以都是。
  • @Alnitak 数据源不是 JSON 对象,所以我必须先转换它才能使用 JSONPath。如果这最终是需要做的,那么我会沿着这条路走,但我会尽量保持简单。
  • @AndrewR jsonpath 作用于解析的 JSON 数据,它恰好是原生 JS 对象结构。

标签: javascript search object


【解决方案1】:

根据您的描述,我已更改函数以查看树状对象,并能够挑选出包含所有提供的 key-value 对的对象。此外,它还允许您指定要在匹配的对象上输出额外参数。 (如iddescription

这是代码和示例 http://jsfiddle.net/hjhQz/

【讨论】:

  • 谢谢汤姆!明天我回去后测试一下。
  • 还有一个问题,如果我只想返回 iddescription 而不是整个原始对象,我将如何更改函数?谢谢!
  • 我更新了小提琴jsfiddle.net/hjhQz/1 基本上唯一的变化就是这一行var out = {};
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2018-03-01
  • 1970-01-01
  • 2017-05-10
  • 2020-01-18
相关资源
最近更新 更多