javaScript获取对象中非空的属性实现方法详解

 更新时间:2023年07月03日 09:00:21   作者:前端老兵  
这篇文章主要为大家介绍了javaScript获取对象中非空的属性实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

javaScript获取对象中非空的属性

要获取JavaScript对象中所有具有值的属性,您可以使用 Object.entries() 方法结合 Array.prototype.filter() 方法。

以下是一个示例代码:

const obj = {
  name: 'John',
  age: 30,
  city: '',
  country: 'USA'
};
const propertiesWithValues = Object.entries(obj).filter(([key, value]) => value !== '');
const propertyNames = propertiesWithValues.map(([key, value]) => key);
console.log(propertyNames);

在上述示例中,我们定义了一个带有多个属性的对象obj。其中,city属性的值为空字符串。

使用Object.entries(obj)可以将一个对象转换为包含 键值对 的数组。每个键值对都是由键和值组成的数组,如[key, value]

接下来,我们使用.filter()方法对键值对数组进行过滤。我们检查每个键值对中的值value是否为空字符串(value !== ''),从而筛选出具有值的属性。

最后,我们使用.map()方法将筛选后的键值对数组转换为只包含属性名的数组。

最终,我们将具有值的属性名数组打印到控制台,以展示对象中具有值的属性。

输出结果将是:["name", "age", "country"],表示nameagecountry这几个属性在对象中都具有值。

您可以根据需要修改obj对象的属性及其值,并使用类似的方法获取具有值的属性列表。

延伸

javaScript获取对象中有值的属性,重新组成一个对象

要获取JavaScript对象中具有值的属性,并将其重新组成一个新的对象,您可以使用Object.entries()方法结合Array.prototype.reduce()方法。

以下是一个示例代码:

const obj = {
  name: 'John',
  age: 30,
  city: '',
  country: 'USA'
};
const newObj = Object.entries(obj).reduce((acc, [key, value]) => {
  if (value !== '') {
    acc[key] = value;
  }
  return acc;
}, {});
console.log(newObj);

在上述示例中,我们定义了一个带有多个属性的对象obj。其中,city属性的值为空字符串。

使用Object.entries(obj)将对象转换为键值对数组。

然后,我们使用.reduce()方法对键值对数组进行归约。我们遍历每个键值对,如果值value不为空字符串(value !== ''),则将这个键值对添加到初始为空对象的acc累加器中。

最后,我们将得到的新对象newObj打印到控制台,展示了只包含具有值的属性的新对象。

输出结果将是:{ name: "John", age: 30, country: "USA" },表示新对象只包含具有值的属性。

您可以根据需要修改obj对象的属性及其值,并使用类似的方法获取具有值的属性,并将其重新组成一个新的对象。

javaScript 获取对象

在 JavaScript 中,可以通过以下几种方式获取对象:

对象字面量:
可以使用花括号 {} 来定义一个对象,并直接获取其中的属性。例如:

const obj = { name: 'Alice', age: 20 };
console.log(obj.name); // 输出:Alice
console.log(obj.age); // 输出:20

点表示法:
可以使用点 . 符号来获取对象的属性。例如:

const obj = { name: 'Bob', age: 25 };
console.log(obj.name); // 输出:Bob
console.log(obj.age); // 输出:25

方括号表示法:
可以使用方括号 [] 来获取对象的属性,属性名作为字符串传入。这种方式适用于属性名包含特殊字符或动态生成的情况。例如:

const obj = { 'user-name': 'Charlie', age: 30 };
console.log(obj['user-name']); // 输出:Charlie
console.log(obj['age']); // 输出:30

或者也可以使用变量来表示属性名:

const propName = 'name';
const obj = { name: 'Dave', age: 35 };
console.log(obj[propName]); // 输出:Dave

使用 Object 的方法:
JavaScript 提供了一些 Object 的方法来操作对象,例如 Object.keys()Object.values()Object.entries() 等。这些方法可以用来获取对象的键、值或键值对数组。例如:

const obj = { name: 'Eve', age: 40 };
const keys = Object.keys(obj);
console.log(keys); // 输出:['name', 'age']
const values = Object.values(obj);
console.log(values); // 输出:['Eve', 40]
const entries = Object.entries(obj);
console.log(entries); // 输出:[['name', 'Eve'], ['age', 40]]

以上是常用的获取对象的方式,根据具体的需求选择适合的方法。

javaScript 复制对象

在 JavaScript 中,拷贝对象有多种方法,包括浅拷贝和深拷贝。

1. 浅拷贝(Shallow Copy):

浅拷贝创建一个新对象,并复制原始对象的属性到新对象中。新对象的属性值是原始对象属性值的引用。实现浅拷贝的方法有:

  • 使用扩展运算符(Spread Operator):使用{...}将原始对象的属性展开到新对象中。
  • 使用Object.assign()方法:将原始对象复制到一个空对象中。
  • 使用数组的slice()方法:仅适用于数组对象。
// 使用扩展运算符
const originalObj = { name: 'Alice', age: 20 };
const newObj = { ...originalObj };
// 使用 Object.assign()
const originalObj = { name: 'Alice', age: 20 };
const newObj = Object.assign({}, originalObj);
// 使用 slice() 方法(仅适用于数组)
const originalArr = [1, 2, 3];
const newArr = originalArr.slice();

这些方法都是浅拷贝,意味着只有第一层的属性会被复制,对于嵌套对象或数组,仍然是引用。

2. 深拷贝(Deep Copy):

深拷贝创建一个新对象,并递归地复制原始对象及其所有嵌套对象的属性。深拷贝生成的对象完全独立于原始对象,修改一个对象不会影响另一个对象。实现深拷贝的方法有:

  • 使用递归:遍历原始对象的所有属性,如果是对象则递归调用深拷贝函数。
  • 使用JSON.parse()JSON.stringify():将对象序列化为 JSON 字符串,然后再解析为新的对象。这种方法对于大多数情况都有效,但不适用于不能被 JSON 序列化的部分(如函数、循环引用)。
// 使用递归
function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    copy[key] = deepCopy(obj[key]);
  }
  return copy;
}
const originalObj = { name: 'Alice', age: 20 };
const newObj = deepCopy(originalObj);
// 使用 JSON.parse() 和 JSON.stringify()
const originalObj = { name: 'Alice', age: 20 };
const newObj = JSON.parse(JSON.stringify(originalObj));

使用递归方法可以处理循环引用的情况,但要注意它可能导致性能问题。而使用JSON.parse()JSON.stringify()的方法简单且适用于大多数情况,但不能处理特殊类型的属性。

根据你的需求选择适合的拷贝方法,浅拷贝适用于简单对象的复制,而深拷贝适用于需要完全独立的对象的复制。

以上就是javaScript获取对象中非空的属性实现详解的详细内容,更多关于javaScript获取对象非空属性的资料请关注程序员之家其它相关文章!

相关文章

  • JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)

    JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)

    这篇文章主要介绍了JavaScript字符串对象split方法入门实例,split方法用于把字符串分割成数组,需要的朋友可以参考下
    2014-10-10
  • JavaScript学习笔记之JS对象

    JavaScript学习笔记之JS对象

    这篇文章向我们详细介绍了javascript中的对象,包括默认对象、数组对象、字符串对象、自定义对象,并通过示例对这4中对象做了对比分析,推荐给大家。
    2015-01-01
  • Javascript快速排序算法详解

    Javascript快速排序算法详解

    这篇文章主要介绍了Javascript快速排序算法的相关资料,需要的朋友可以参考下
    2014-12-12
  • JavaScript bold方法入门实例(把指定文字显示为粗体)

    JavaScript bold方法入门实例(把指定文字显示为粗体)

    这篇文章主要介绍了JavaScript字符串对象的bold方法入门实例,bold方法用于把指定文字显示为粗体,需要的朋友可以参考下
    2014-10-10
  • javascript日期格式化示例分享

    javascript日期格式化示例分享

    这篇文章主要介绍了javascript日期格式化示例,需要的朋友可以参考下
    2014-03-03
  • JavaScript入门教程(9) Document文档对象

    JavaScript入门教程(9) Document文档对象

    Document文档对象是JavaScript中window和frames对象的一个属性,是显示于窗口或框架内的一个文档。
    2009-01-01
  • js前端面试题及答案整理(一)

    js前端面试题及答案整理(一)

    各公司秋招很快就开始了,最近在准备面试的东西,干脆将发现的各类面试题整理一下共享出来,大部分面试题是没有标准答案的,我给出的答案也是仅供参考,如果有更好的解答欢迎在评论区留言
    2016-08-08
  • 深入理解JavaScript系列(40):设计模式之组合模式详解

    深入理解JavaScript系列(40):设计模式之组合模式详解

    这篇文章主要介绍了深入理解JavaScript系列(40):设计模式之组合模式详解,组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下
    2015-03-03
  • javascript基本类型详解

    javascript基本类型详解

    本文介绍了javascript中的5个原始值(数字,字符,布尔,null,undefined),6个typeo能判断(数字,字符,布尔,object,function,undefined)以及9个原生的内置构造函数,是篇非常不错的文章,这里推荐给大家。
    2014-11-11
  • JavaScript中的this机制

    JavaScript中的this机制

    简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却让很多人张二摸不着头脑。希望看完这篇文章了你能回答出来this到底指引个甚。
    2016-01-01

最新评论

?


http://www.vxiaotou.com