同时映射和过滤数组 [英] Map and filter an array at the same time

查看:33
本文介绍了同时映射和过滤数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象数组,我想对其进行迭代以生成新的过滤数组.而且,我需要根据参数从新数组中过滤掉一些对象.我正在尝试:

function renderOptions(options) {返回 options.map(function (option) {如果(!option.assigned){返回(一些新对象);}});}

这是一个好方法吗?有没有更好的方法?我愿意使用任何库,例如 lodash.

解决方案

你应该使用 Array.reduce 为此.

var options = [{名称:'一',分配:真},{名称:'二',分配:假},{名称:'三',分配:真},];var 减少 = options.reduce(function(filtered, option) {如果(选项.分配){var someNewValue = { name: option.name, newProperty: 'Foo' }过滤推(someNewValue);}返回过滤;}, []);document.getElementById('output').innerHTML = JSON.stringify(reduced);

仅分配选项

<pre id="输出">

<小时>

或者,reducer 可以是一个纯函数,像这样

var reduction = options.reduce(function(result, option) {如果(选项.分配){返回结果.concat({名称:option.name,新属性:'Foo'});}返回结果;}, []);

I have an array of objects that I want to iterate over to produce a new filtered array. But also, I need to filter out some of the objects from the new array depending of a parameter. I'm trying this:

function renderOptions(options) {
    return options.map(function (option) {
        if (!option.assigned) {
            return (someNewObject);
        }
    });   
}

Is that a good approach? Is there a better method? I'm open to use any library such as lodash.

解决方案

You should use Array.reduce for this.

var options = [
  { name: 'One', assigned: true }, 
  { name: 'Two', assigned: false }, 
  { name: 'Three', assigned: true }, 
];

var reduced = options.reduce(function(filtered, option) {
  if (option.assigned) {
     var someNewValue = { name: option.name, newProperty: 'Foo' }
     filtered.push(someNewValue);
  }
  return filtered;
}, []);

document.getElementById('output').innerHTML = JSON.stringify(reduced);

<h1>Only assigned options</h1>
<pre id="output"> </pre>


Alternatively, the reducer can be a pure function, like this

var reduced = options.reduce(function(result, option) {
  if (option.assigned) {
    return result.concat({
      name: option.name,
      newProperty: 'Foo'
    });
  }
  return result;
}, []);

这篇关于同时映射和过滤数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆