NodeJS如何检查对象是否具有与另一个对象相同的所有属性值

时间:2015-06-11 03:42:38

标签: javascript json node.js

我有两个对象,一个是通过读取JSON文件构建的,另一个是从作为url参数传入的查询构造的,类似如下:

<?php
    // Remove trailing forward slash
    $str    =   rtrim('http://www.example.com/test/is/best/',"/");
    // Simple match characters from back
    $exp    =   preg_match("!/([a-zA-Z0-9]{1,})$!",$str,$match);
    // $match[1] gives you: best
    if(isset($match[1])) {
            // $redirect gives you: best.php
            if(is_file($redirect = $match[1].".php")) {
                    // Include the best.php
                    include($redirect);
                }
        }
?>

它确实有JSON数据的子集。例如,通过JSON.parse()解析的JSON数据可能具有如下列表:

boxofficehits.json

q = req.query.query

我的查询对象可能如下所示:     var q = {&#34; id&#34;:&#34;&#34; Strawberry swing&#34;};

我正在通过require阅读JSON文件。

[
    {
        "id": "Strawberry swing",
        "artist": "Coldplay",
        "release": "19 Jun, 2009",
        "other entries": ""
        ...
    },
    {
        "id": "No sleep",
        "artist": "Wiz Khalifa",
        "release": "20 April, 2011",
        "other entries": ""
        ...
    }    


]

我想返回一个如下所示的对象:

var boxofficehits = require('./boxofficehits.json');

除了循环和检查属性的明显方法之外,是否有可用于实现此目的的方法/库?

提前致谢。

2 个答案:

答案 0 :(得分:1)

检查同余(https://www.npmjs.com/package/congruence)。它完全符合您的要求:

var template = {
  id: 57,
  name: 'Travis'
};
var object = {
  id: 57,
  name: 'Travis',
  color: 'blue',
  foo: 1
};

// the extra object properties are ignored 
assert.isTrue(_.similar(template, object));

您还可以设置模板:

var object = {
  a: 3.1415926535,
  foo: {
    bar: {
      b: 'hello world',
      c: [ 1, 1, 2, 3, 5, 8 ],
      d: new Date()
    }
  }
};
var matchingTemplate = {
  a: 3.1415926535,
  foo: _.congruent({
    bar: _.congruent({
      b: _.isString,
      c: _.isArray,
      d: _.compose(_.not, _.isFunction)
    })
  })
};

assert.isTrue(_.congruent(matchingTemplate, object));

答案 1 :(得分:0)

Loadsh库提供了filter方法。以下代码有效:

var boxofficehits = require('./boxofficehits.json');

var match={
            "id": "Strawberry swing",
            "artist": "Coldplay"
    };
var result = _.filter(boxofficehits , match);

结果:

{
        "id": "Strawberry swing",
        "artist": "Coldplay",
        "release": "19 Jun, 2009",
        "other entries": ""
        ...
    }