lodash 中文学习拾零之 Object篇

作者:Soaring_Tiger 转载请注明出处 http://blog.csdn.net/Soaring_Tiger

前情提要1 : lodash中文学习拾零之Array篇
前情提要2:lodash 中文学习拾零之 Chain篇
前情提要3:lodash 中文学习拾零之 Collection篇

4. 处理哪些Object?

lodash的Object方法处理的是:function, array, string, JSON


4.1 判断Object类型

lodash提供了一系列用于判断Obejct类型的方法,称为 variadic functions
_.isString
_.isArray
_.isTypedArray
_.isNumber
_.isBoolean
_.isDate
_.isPlainObject
_.isRegExp
_.isFunction
_.isObject
_.isPlainObject
_.isFinite
_.isElement
_.isNative
_.isUndefined
_.isNull
_.isNaN

//例如下面这个 _.isString用来判断输入的参数是否是String类型
function hello(name) {
   
       if (_.isString(name)) {
           return 'hello, ' + name;
       }
}
   hello('world');
   // → "hello, world"
   hello();
   // → undefined
//判断是否是函数的参数
_.isArguments(function() {
    return arguments; }());
// → true

_.isArguments([1, 2, 3]);
// → false
//判断是否语言意义上的Object: 
//(e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))
_.isObject({});
//true

_.isObject([1, 2, 3]);
//true

_.isObject(1);
//false
//判断是否 plain object
function Foo() {
   
  this.a = 1;
}

_.isPlainObject(new Foo);
// → false

_.isPlainObject({a:1});
// → true

4.2 赋值与取值(Assigning and accessing properties)

创建一个javascript object对象并对之赋值是个常见工作,其中有些过程挺无聊的,比如:把一个对象的部分数据搞到另一个里去、或者必须确保为新对象填充默认值、确定是否存在某个key并且准确的赋值……
不用慌,对于上述等等无聊的事情,lodash提供了一系列工具来让你轻松完成。


4.2.1 扩展对象(Extending objects)

4.2.1.1 _.assign(object, [sources], [customizer], [thisArg])

注意[sources]这个参数,理论上可以是无限多,缺省情况下,后面的同名Key:Value对会覆盖前面的值。

的返回值一定是个Object

var object = {
       name: '汤姆',
       age: 42 
};

_.assign(object, {occupation: '程序猿'},{
  'name':'杰瑞'});
//注意,此处新的 name:'杰瑞' 覆盖了原有的数据 '汤姆'
// → 
// {
   
//   name: "杰瑞",
//   age: 42,
//   occupation: "程序猿"
// }


// 设计自定义的回调函数
var defaults = _.partialRight(_.assign, function(value, other) {
  return _.isUndefined(value) ? other : value;
});

defaults(object, { 'language': 'JS' }, { 'name': '果菲' });
// 原来没有的属性language及其值被添加了上去,而'name'的值还是保持不变
// → { 
//      'name': '杰瑞', 
//      'age': 42,
//      'occupation':'程序猿',
//      'language':'JS'
//   }

4.2.1.2 _.merge(object, [sources], [customizer], [thisArg])

采用递归的方式将sources objects合并到目标Object当中,后面的相同属性会覆盖前面的相同属性。

_.merge (合并器)的
第一个参数是目标Object
第二个参数是源Object(即要合并进来的内容)
第三个参数是自定义处理器并接受五个参数(objectValue, sourceValue, key, object, source)

.merge的返回值一定是个Object

var users = {
  'data': [{ 'user': '钱夫人' }, { 'user': '阿土伯' }]
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码实现: ```java public class NumberToChinese { // 数字转中文大写 private static final String[] CHINESE_NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static final String[] CHINESE_UNITS = {"", "拾", "佰", "仟"}; private static final String[] CHINESE_GROUP_UNITS = {"", "万", "亿"}; public static String numberToChinese(double num) { if (num == 0) { return "零元整"; } long integerPart = (long) num; int decimalPart = (int) Math.round((num - integerPart) * 100); StringBuilder sb = new StringBuilder(); int groupIndex = 0; while (integerPart > 0) { int groupNum = (int) (integerPart % 10000); sb.insert(0, CHINESE_GROUP_UNITS[groupIndex++]); if (groupIndex > 1 && groupNum < 1000) { sb.insert(0, "零"); } sb.insert(0, groupToChinese(groupNum)); integerPart /= 10000; } sb.append("元"); if (decimalPart > 0) { sb.append(decimalToChinese(decimalPart)); } else { sb.append("整"); } return sb.toString(); } private static String groupToChinese(int num) { StringBuilder sb = new StringBuilder(); int unitIndex = 0; boolean addZero = false; while (num > 0) { int digit = num % 10; if (digit == 0) { addZero = true; } else { if (addZero) { sb.insert(0, CHINESE_NUMBERS[0]); } sb.insert(0, CHINESE_NUMBERS[digit] + CHINESE_UNITS[unitIndex]); addZero = false; } unitIndex++; num /= 10; } return sb.toString(); } private static String decimalToChinese(int num) { StringBuilder sb = new StringBuilder(); int digit = num / 10; if (digit > 0) { sb.append(CHINESE_NUMBERS[digit] + "角"); } digit = num % 10; if (digit > 0) { sb.append(CHINESE_NUMBERS[digit] + "分"); } return sb.toString(); } public static void main(String[] args) { double num = 12345678; String chinese = numberToChinese(num); System.out.println(chinese); } } ``` 输出结果为:`壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元整`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值