资讯专栏INFORMATION COLUMN

30-seconds-code——Object

lbool / 3011人阅读

摘要:英文文章来源于删除对象中除指定键值的属性用递归的方法用方法遍历对象然后删除不是在给定数组中的属性如果你传入,它将对该键所对应的对象进行深度遍历的变形非原著作对所有的键对应的对象进行深度遍历用方法遍历对象然后删除不是在给定数组中的属性如

英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md

Object cleanObj

删除JSON对象中除指定键值的属性.

用递归的方法
Object.keys() 方法遍历JSON对象然后删除不是include在给定数组中的属性.
如果你传入 childIndicator ,它将对该键所对应的JSON对象进行深度遍历.

const cleanObj = (obj, keysToKeep = [], childIndicator) => {
  Object.keys(obj).forEach(key => {
    if (key === childIndicator) {
      cleanObj(obj[key], keysToKeep, childIndicator);
    } else if (!keysToKeep.includes(key)) {
      delete obj[key];
    }
  })
}
/*
  const testObj = {a: 1, b: 2, children: {a: 1, b: 2}}
  cleanObj(testObj, ["a"],"children")
  console.log(testObj)// { a: 1, children : { a: 1}}
*/
cleanObj的变形(非原著作)

对所有的键对应的JSON对象进行深度遍历

Object.keys() 方法遍历JSON对象然后删除不是 include 在给定数组中的属性.
如果给定的属性值为object,则看传入的 dep 是否为false,或者没有第三个参数,则直接删除.
如果传入 dep 为true,则进行深度遍历.

const cleanObj = (obj, keysToKeep = [], dep=false) => {
  Object.keys(obj).forEach(key => {
    if(dep) {
      if (obj[key].constructor.name === "Object") {
        cleanObj(obj[key], keysToKeep, dep)
      } else {
        if (!keysToKeep.includes(key)) {
          delete obj[key];
        }
      }
    } else {
      if (!keysToKeep.includes(key)) {
        delete obj[key];
      }
    }
  })
  return obj
}
/*
  const testObj = {a:1, b:{a:1, b:2, c:3}, c:{a:1, b:2}, d: {a:1, b:2, c:3}}
  cleanObj(testObj, ["a"],"children")  // {a: 1, b: {a: 1}, c: {a: 1}, d: {a: 1, c: 3}}
*/
objectFromPairs

将一个键值对形式的数组转化为对象
Array.reduce() 去创建对象并合并键值对.

const objectFromPairs = arr => arr.reduce((a, v) => (a[v[0]] = v[1], a), {});
// objectFromPairs([["a",1],["b",2]]) -> {a: 1, b: 2}
objectToPairs

将一个对象转化为键值对形式的数组.

Object.keys() 将对象转化为对象的键数组,然后 Array.map() 生成一个键值对的数组.

const objectToPairs = obj => Object.keys(obj).map(k => [k, obj[k]]);
// objectToPairs({a: 1, b: 2}) -> [["a",1],["b",2]])
orderBy

按对象属性和排序规则排序对象数组.

使用 Array.sort() 的自定义排序规则排序,根据传入的 order排序方式,用解构来实现指定的属性的位置交换.
如果没有传入参数 order 默认值为asc.

const orderBy = (arr, props, orders) =>
  arr.sort((a, b) =>
    props.reduce((acc, prop, i) => {
      if (acc === 0) {
        const [p1, p2] = orders && orders[i] === "desc" ? [b[prop], a[prop]] : [a[prop], b[prop]];
        acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
      }
      return acc;
    }, 0)
  );
/*
const users = [{ "name": "fred",   "age": 48 },{ "name": "barney", "age": 36 },
  { "name": "fred",   "age": 40 },{ "name": "barney", "age": 34 }];
orderby(users, ["name", "age"], ["asc", "desc"]) -> [{name: "barney", age: 36}, {name: "barney", age: 34}, {name: "fred", age: 48}, {name: "fred", age: 40}]
orderby(users, ["name", "age"]) -> [{name: "barney", age: 34}, {name: "barney", age: 36}, {name: "fred", age: 40}, {name: "fred", age: 48}]
*/
select

从一个对象中检索出选择其所代表的属性.

如果属性不存在返回 undefined.

const select = (from, selector) =>
  selector.split(".").reduce((prev, cur) => prev && prev[cur], from);

// const obj = {selector: {to: {val: "val to select"}}};
// select(obj, "selector.to.val"); -> "val to select"
shallowClone

对象的浅拷贝.

Object.assign() 和一个 ({}) 来实现对源对象的浅拷贝.

const shallowClone = obj => Object.assign({}, obj);
/*
const a = { x: true, y: 1 };
const b = shallowClone(a);
a === b -> false
*/
truthCheckCollection

判断第一个参数所代表的集合中的每一个对象中是否包含第二个参数所代表的属性.

Array.every() 去检查结合中每一个对象是否包含pre属性.

const truthCheckCollection = (collection, pre) => (collection.every(obj => obj[pre]));
// truthCheckCollection([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}], "sex") -> true

更多关于30-seconds-code中文翻译https://github.com/lvzhenbang/article/blob/master/js/30-seconds-code/index.md

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90528.html

相关文章

  • 30-seconds-code——adapter

    摘要:英文文章来源于给定一个键值和一组参数,但给定一个上下文时调用它们。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Adapter call 给定一个键值和一组参数,但给定一个上下文时调用它们。 使用闭包调用存储的键值与存储的参数 const call = ( key, ....

    dcr309duan 评论0 收藏0
  • 30-seconds-code——string

    摘要:英文文章来源于计算一个字符串中字符的所有排序情况使用递归遍历字符串中的每个字符计算剩余字符串的所有顺序用区合并该字符和剩余字符串的每种顺序然后用将该字符串的所有顺序合并到一个数组中当字符串的等于或者时,是两个基例字符串的首字母大写用 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README...

    tinysun1234 评论0 收藏0
  • 30-seconds-code ——utility集合

    摘要:英文文章来源于返回参数列表中第一个非和的参数用实现返回第一个非参数返回一个用自定义函数中的函数是否返回来对中传入的参数列表尽心过滤用去遍历参数列表,用给定的函数的返回值来过滤参数列表返回给定值的基本类型返回给定值的构造函数名字的小 Utility 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master...

    Jochen 评论0 收藏0
  • 30-seconds-code——browser

    摘要:显示所有指定的元素用操作符和清除所有指定元素的属性。使用了两个事件监听器。将指定的数组元素转换成元素标签,然后将它们插入指定的选择器元素内用和去生成一个元素标签列表复制一个字符串到剪切板。用去执行复制到剪切板。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Browser...

    izhuhaodev 评论0 收藏0
  • 30-seconds-code——array

    摘要:英文文章来源于数组最大公约数计算数字数组最大公约数用和运算式使用递归计算一个数字数组的最大公约数数组最小公倍数求数字数组的最小公倍数用和运算式使用递归计算一个数字数组的最小公倍数返回一个数组中的最大值。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Array 数组最大公...

    adie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<