是否可以创建一个只允许某个对象存储在其中的数组?有没有一种方法可以将元素添加到我可以覆盖的数组中?只能存储一种类型的对象的数组?
0
A
回答
1
不是直接。但是你可以隐藏在一个封闭的阵列,并只提供自定义的API来访问它:
var myArray = (function() {
var array = [];
return {
set: function(index, value) {
/* Check if value is allowed */
array[index] = value;
},
get: function(index) {
return array[index];
}
};
})();
使用它像
myArray.set(123, 'abc');
myArray.get(123); // 'abc' (assuming it was allowed)
2
是的,你可以,只是覆盖阵列的推阵列(让我们说你想存储的数字比执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
简单地改变Number
你想匹配任何构造此外,我可能会添加和else语句左右如果这就是你想要的,就会引发错误。
UPDATE:
使用Object.observe(目前仅适用于Chrome提供):
var myArr = [];
Array.observe(myArr, function(changes) {
for(var change of changes) {
if(change.type == "update") {
if(myArr[change.name].constructor !== Number) myArr.splice(change.name, 1);
} else if(change.type == 'splice') {
if(change.addedCount > 0) {
if(myArr[change.index].constructor !== Number) myArr.splice(change.index, 1);
}
}
}
});
现在ES6还有,你应该能够做到以下代理服务器:
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
+0
但是,当数组设置为arr [3] =“不是数字”时,这会工作吗? – RedHatter 2015-04-05 22:19:52
+0
我更新了我的答案 – 2015-04-06 09:24:19
相关问题
- 1. 无法在名称处存储_SwiftValue类型的对象。只能存储NSNumber,NSString,NSDictionary和NSArray类型的对象。'
- 2. 只包含某种类型的对象的数组
- 3. swift - 在单个数组中存储多类型对象数组
- 4. 在同一个对象存储多种类型
- 5. 如何将不同的对象存储在数组中并获取某种类型的对象?
- 6. 使用NoRM在MongoDB的一个集合中存储多种类型的对象
- 7. Java数组来存储一个类的多个对象
- 8. 泛型类型数组的一种可能的方法?
- 9. 数组存储任何对象也是AnyObject类型
- 10. (setValue :)无法在pictureURL中存储_SwiftValue类型的对象。只能类型的NSNumber,NSString的,NSDictionary中,和NSArray的
- 11. AS3:只允许一定数量的某种类型的对象进入一个数组
- 12. 静态的NSMutableDictionary只能存储一个对象
- 13. std :: tr1 :: function - 在常见容器中存储各种类型的函数对象
- 14. 如何将对象数组上传到另一种类型的C#中的对象数组?
- 15. 多维数组存储多种数据类型
- 16. 存储MongoDB ObjectIds数组的类型?
- 17. 两种不同对象类型的多维数组
- 18. 如何检查对象是否是某种类型的数组?
- 19. php - 存储包含对象的数组
- 20. ArrayList只存储一个对象
- 21. 不能存储一个对象到数组中? C++
- 22. 多种类型的数组
- 23. 泛型集合 - 确保集合只包含一种类型的对象?
- 24. 存储多种类型的字符
- 25. HTML5 localStorage vs sesionStorage vs另一种类型的数据存储性能
- 26. 如何访问存储在类中的数组中的对象?
- 27. 在.NET 3.5中存储3种数据类型的列表/元组有什么好的对象
- 28. 如何指定对象的类型是几种可能的对象类型之一?
- 29. 如何为一种类型的对象创建一个类?
- 30. 数组或其他集合,我可以存储多种类型
不,没有。抱歉。 – Scimonster 2015-04-05 19:02:50
不是直接操作数组,而是创建自己的函数或操作数组的方法,并且可以在将数据实际放入数组之前调整数据。 – jfriend00 2015-04-05 19:15:57