【问题标题】:Javascript return and map to an objectJavascript返回并映射到一个对象
【发布时间】:2017-09-29 13:30:58
【问题描述】:

我有一个对象,我想返回两个值并将它们映射到 1 个对象中。

对象

Itemlist:[
{name: 'Chicken', searchParam: 'chicken', search: true},
{name: 'table', searchParam: 'table', search: false},
{name: 'books', searchParam: 'books', search: true}]

希望从 Itemlist searchParam 返回并搜索并映射到结果将是的对象:

{chicken: true},{table: false},{books: true},

所以 return 会是这样的

{ Itemlist[0].searchParam :Itemlist[0].search }

【问题讨论】:

    标签: javascript object dictionary mapreduce


    【解决方案1】:

    您可以使用 array#map 从 itemlist 的每个对象中获取包含 namesearch 值的对象数组。

    var itemlist = [{name: 'Chicken', searchParam: 'chicken', search: true},{name: 'table', searchParam: 'table', search: false},{name: 'books', searchParam: 'books', search: true}];
    
    var result = itemlist.map(({searchParam, search}) => ({[searchParam]: search}));
    console.log(result);

    ES5 代码:

    var itemlist = [{name: 'Chicken', searchParam: 'chicken', search: true},{name: 'table', searchParam: 'table', search: false},{name: 'books', searchParam: 'books', search: true}];
    
    var result = itemlist.map(function(item) {
      var obj = {};
      obj[item.searchParam] = item.search;
      return obj;
    });
    console.log(result);

    【讨论】:

    • 这需要一个 ES6 转译器
    • @jordiburgos That would require an ES6 transpiler,不,它没有。大多数现代浏览器现在都是 ES6。如果您需要针对垃圾浏览器,那是一个不同的问题。 ES6,现在应该被视为规范。
    【解决方案2】:

    你可以的

    let arr = [
    {name: 'Chicken', searchParam: 'chicken', search: true},
    {name: 'table', searchParam: 'table', search: false},
    {name: 'books', searchParam: 'books', search: true}];
    
    
    let result = arr.reduce((a, b) => {
        let prop = b.searchParam;
        a[prop] = b.search;
        return a;
    }, {});
    
    console.log(result);

    【讨论】:

    • 我做了一行:a[b.searchParams] = b.search;返回一个;
    • I made into one line,如果你想要简短的内容,那么var result = Itemlist.reduce((a,b) => (a[b.searchParam]=b.search,a), {})
    • 请注意,结果与问题所述不同。
    • 如果你喜欢单行,那就是Object.assign(...arr.map(x => ({[x.searchParam]: x.search})))
    【解决方案3】:

    您可以创建一个新对象,然后使用 [] 语法分配属性

    var result = {};
    result[Itemlist[0].searchParam] = Itemlist[0].search;
    return result;
    

    【讨论】:

      【解决方案4】:

      var itemlist = [{
          name: 'Chicken',
          searchParam: 'chicken',
          search: true
      }, {
          name: 'table',
          searchParam: 'table',
          search: false
      }, {
          name: 'books',
          searchParam: 'books',
          search: true
      }];
      
      var list = itemlist.map(function(item){
         return {[item['name']] : item.search}
        });
      
      console.log(list);

      【讨论】:

        猜你喜欢
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 2023-02-09
        • 1970-01-01
        • 2021-02-17
        • 2017-01-01
        相关资源
        最近更新 更多