js循环往数组添加具有get set 方法的数据
时间: 2023-11-27 18:51:38 浏览: 119
可以使用 `Object.defineProperty` 方法给对象添加 `get` 和 `set` 方法,然后在循环中创建这个对象并将其添加到数组中。以下是一个示例代码:
```javascript
let arr = [];
for (let i = 0; i < 5; i++) {
let obj = {};
Object.defineProperty(obj, 'value', {
get() {
console.log(`Getting value ${i}`);
return i;
},
set(newValue) {
console.log(`Setting value ${i} to ${newValue}`);
i = newValue;
}
});
arr.push(obj);
}
console.log(arr[2].value); // 输出 "Getting value 2" 和 2
arr[3].value = 10; // 输出 "Setting value 3 to 10"
console.log(arr[3].value); // 输出 "Getting value 3" 和 10
```
在上面的代码中,我们循环了 5 次,并创建了 5 个具有 `get` 和 `set` 方法的对象,并将它们添加到了数组中。我们还演示了如何获取和设置对象的 `value` 属性。
相关问题
JS查找数组中重复元素的方法详解
JavaScript中有多种方法可以查找数组中的重复元素。以下是几种常见的方法:
1. **使用Set数据结构**:
```javascript
function findDuplicates(arr) {
return [...new Set(arr)].filter((item, index, self) => self.indexOf(item) !== index);
}
```
这里Set是一种不包含重复值的数据结构,通过转换为Set再回转数组,可以找出不重复的元素,然后过滤掉它们。
2. **使用Map对象**:
```javascript
function findDuplicates(arr) {
let map = new Map();
return arr.filter(value => map.has(value) && !map.get(value++)).slice(0, -1); // 由于Map的迭代器会跳过最后一个添加的键值对,所以要去掉最后一个元素
}
```
使用Map存储已遍历过的元素作为键,如果遇到重复元素则返回。
3. **双重循环**:
```javascript
function findDuplicates(arr) {
let duplicates = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
duplicates.push(arr[i]);
break;
}
}
}
return duplicates;
}
```
这种方法逐个比较数组中的元素,发现重复就加入结果数组。
4. **使用lodash库** (第三方库):
```javascript
const _ = require('lodash');
function findDuplicates(arr) {
return _.difference(_.uniq(arr), arr);
}
```
Lodash库提供了方便的函数处理数组,`_.difference`能找出两个数组的不同元素,而`_.uniq`去重后找出差异就是重复项。
阅读全文