【问题标题】:Selecting item from JSON object and return as JSON object like C# LINQ从 JSON 对象中选择项目并作为 JSON 对象返回,如 C# LINQ
【发布时间】:2016-11-07 01:08:24
【问题描述】:

我有一个包含大量数据的 JSON 对象。我想将一个 JSON 对象传递给只需要包含一个值列表的 web 方法。 使用 $.grep 我们可以像 LINQ 一样过滤数据。 但我们无法选择该项目。 (*据我所知)。 有没有其他选择。我不想使用除 Jquery 之外的任何 JS 插件(像 Underscore js)!

让我用示例数据来解释一下。 如果我的 Json 对象是这样的。

data ={"employees":[
    {"firstName":"John", "lastName":"Doe" , "Age":"12"},
    {"firstName":"Anna", "lastName":"Smith", "Age":"13"},
    {"firstName":"Peter", "lastName":"Jones", "Age":"42"}
]};

我想要这样的结果集,

data ={"employees":[
    { "Age":"12"},
    { "Age":"13"},
    { "Age":"42"}
]};

不使用、for 或 foreach 循环! 有谁知道吗?

【问题讨论】:

  • 您的 data 格式无效 - 父对象需要有一个键来存储数组。另外,为什么你不想使用循环?无论如何,这就是任何抽象方法在内部都会做的所有事情。
  • 你的意思是:data.employees.map(function(d){return d.Age}) ?
  • @Rory McCrossan:这只是我给出的样本数据!我想知道有没有像LINQ这样的方法!因为如果我给出了循环,我需要将它放置太多次!
  • @griffon vulture:我不知道!让我试试!
  • “我有一个 JSON 对象” - 不,你没有:there ain't no such thing. 你有一个对象。

标签: javascript jquery json knockout.js


【解决方案1】:

你可以使用 linq.js

var data = { employees: [{ firstName: "John", lastName: "Doe", Age: "12" }, { firstName: "Anna", lastName: "Smith", Age: "13" }, { firstName: "Peter", lastName: "Jones", Age: "42" }] },
    result = Enumerable.From(data.employees).Select('{Age:$.Age}').ToArray();

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

【讨论】:

    【解决方案2】:

    你应该使用地图:

    var data ={"employees":[
        {"firstName":"John", "lastName":"Doe" , "Age":"12"},
        {"firstName":"Anna", "lastName":"Smith", "Age":"13"},
        {"firstName":"Peter", "lastName":"Jones", "Age":"42"}
    ]};
    
    function select(data, key, item){
      var selectedData = {}
      selectedData[key] = data[key].map(function(d){return d[item]}) 
      return selectedData;
    }
    
    select(data, "employees","Age")
    

    【讨论】:

      【解决方案3】:

      如果您将数据更改为数组而不是对象。您可以像这样使用数组功能

      const data =[
          {"firstName":"John", "lastName":"Doe" , "Age":"12"},
          {"firstName":"Anna", "lastName":"Smith", "Age":"13"},
          {"firstName":"Peter", "lastName":"Jones", "Age":"42"}
      ];
      
      const data2 = data.map(item => {
        return {Age: item.Age}
      })
      

      data2 看起来像这样

      data2 =[
          { "Age":"12"},
          { "Age":"13"},
          { "Age":"42"}
      ]
      

      【讨论】:

      • OP 的对象是一个数组。 (至少,他要改变的部分是一个数组。)
      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多