函数return以及lodash中的extend,each,map方法

2018-07-23

1.关于函数中return与否的问题

    if (custom == undefined) {
        let content = content1;
        return content;
    } else {
        let content = custom.call(null, flight);
        return content;
    }
<span className={rowClassName}>{content}</span>

为什么页面上直接返回了content值而没有在 span中显示?

而且,如果写做

    if (custom == undefined) {
        let content = content1;

    } else {
        let content = custom.call(null, flight);
    }
<span className={rowClassName}>{content}</span>

会提示说: content undefined?

为什么return之后没有这个提示,不return 的话会报错?

采用三目运算就没有问题

let content = custom == undefined ? (content = content1) : (content = custom.call(null, flight));

{content}

会正确在页面上显示content,这是为什么?

2.lodash中each与map分别遍历后的返回值:

使用each遍历

返回

let newColumns = new Array();
            each(Columns, (c) => {
                let key = get(c, ‘key‘);
                let def = get(ColumnsDefine, key);
                let aa = extend({}, c, def);
                newColumns.push(aa);
            });

使用map遍历:

let newColumns = map(Columns, (c) => {
                let key = get(c, ‘key‘);
                let def = get(ColumnsDefine, key);
                return extend({}, c, def);
                // newColumns.push(aa);
            });

目的是合并worker端传来的Columns和ColumnsDefined里的定义的Columns,最后使其

返回为一个新的值newColumns.

但是最开始使用each并没有成功返回我想要的合并后的值:

```javascript

let newColumns = each(Columns,(c) => {

let key = get(c, ‘key‘);

let def = get(ColumnsDefine, key);

return extend({},c,def);

})

为什么?

先看一下lodash中的几个方法: extend,each,map

extend 就是 assignIn的别名。

function Foo() {
  this.a = 1;
}

function Bar() {
  this.c = 3;
}

Foo.prototype.b = 2;
Bar.prototype.d = 4;

_.assignIn({ ‘a‘: 0 }, new Foo, new Bar);
// => { ‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4 }

each就是forEach的别名。

_.forEach([1, 2], function(value) {
  console.log(value);
});
// => Logs `1` then `2`.

_.forEach({ ‘a‘: 1, ‘b‘: 2 }, function(value, key) {
  console.log(key);
});
// => Logs ‘a‘ then ‘b‘ (iteration order is not guaranteed).

map方法:


function square(n) {
  return n * n;
}

_.map([4, 8], square);
// => [16, 64]

_.map({ ‘a‘: 4, ‘b‘: 8 }, square);
// => [16, 64] (iteration order is not guaranteed)

var users = [
  { ‘user‘: ‘barney‘ },
  { ‘user‘: ‘fred‘ }
];

// The `_.property` iteratee shorthand.
_.map(users, ‘user‘);
// => [‘barney‘, ‘fred‘]

原文地址:https://www.cnblogs.com/InnerPeace-Hecdi/p/9357605.html

时间: 2024-10-08 22:04:19

函数return以及lodash中的extend,each,map方法的相关文章

ES5比较Jquery中的each与map 方法?

1.each es5: var arr = [1, 5, 7, 8, 9];var arr1 = []; arr.forEach(function (v, i) { arr1.push(v * 4) //无法跳出循环 没有跳出循环的语句}); jquery: var arr = [ 1, 2, 3, 4, 5 ] $.each( arr, function ( i, v ) { //arr可以是 数组|对象|伪数组 因为遍历的是数组对象 console.log( i + ', ' + v );

在JS中使用COM组件的方法

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数 { // TODO: 在此添加实现代码 MessageBox(NULL,L"test",L"test",MB_OK); return S_OK; } STDMETHODIMP Ctest::test1(BSTR a1) //有一个字符串输入参数 { // TODO: 在此添加实现代码 MessageBox(

Floodlight 中创建消息对象的方法

在 floodlight 中创建各种openflow message 和 action 等采用的是简单工厂方式,BasicFactory类(实现OFMessageFactory接口,)会根据消息的类型创建不同的对象,达到更好的封装效果:此外这里调用的是枚举类型的方法.下面是具体代码: ----------工厂接口,还有OFActionFactory,约束需要具体工厂完成的事情 public interface OFMessageFactory { // 根据消息类型得到具体的实例 public 

使对象具有ES6中Iterator接口的实现方法

es6中只有具有iterator接口的数组或者类数组(arguments)都可以使用for of来循环,但是对于对象来说不行,可以利用迭代器中的原理来给对象生成一个迭代器,实现让对象可以使用for of 1 var j={ 2 name:'小红', 3 age:18 4 } 5 //给j对象添加一个iterator接口 6 j[Symbol.iterator]=function(){ 7 //使用object.keys()方法把j对象中的k值读取出来存在数组当中 8 var arr=Object

Android中常用的bitmap处理方法

收集了很多bitmap相关的处理方法,几乎全部应用在项目中,所以特记录下! package com.tmacsky.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.gr

程序代码中退出函数exit()与返回函数return ()的区别

  exit(0):正常运行程序并退出程序:   exit(1):非正常运行导致退出程序:   return():返回函数,若在主函数中,则会退出函数并返回一值.  解析: 1. return返回函数值,是关键字: exit 是一个函数. 2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它表示了一个进程的结束. 3. return是函数的退出(返回):exit是进程的退出. 4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的).ex

Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题

转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: 1 2 3 4 5 6 7 8 9 10 11 12 create or replace procedure getidlist is   l_idlist varchar2(200); begin   l_idlist:='1,2,3,4';   for brrs in (select * fro

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值. push,pop和min函数的时间复杂度都为O(1). 看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否? 如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值. 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办. 既然只用一个变量没法解决这个问题,那我们就增加变量.如果说每个结点除了保存当前的 值, 另外再保存一个从该结点到栈底的