是否可以使用数组视图?
Are array views possible?
我想知道是否有可能以跨浏览器兼容的方式模仿ArrayBufferView
在ArrayBuffer
上的约束边界行为(向下说IE8)。
考虑一个像这样的Javascript数组结构:
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
我想获得a
子集的数组视图b
。例如,当b
的索引发生突变时,a
中的索引也会发生突变。
使用例子:
var b = ViewOf(a, 3, 6); // Make a view of a, from index 3 to 6
console.log(b); // [3, 4, 5, 6]
b[0] = 42;
console.log(a); // [0, 1, 2, 42, 4, 5, 6, 7, 8, 9]
默认情况下这是不可能的。您可以使用自定义函数模拟它。
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
ViewOf = function(a, startIdxx, endIdxx){
return {
startIdx: startIdxx,
endIdx: endIdxx,
set: function(index, value){
a[index+this.startIdx] = value;
},
get: function(index){
return a[index+this.startIdx];
}
}
}
现在可以像下面这样使用上面的函数
b = ViewOf(a, 3, 6);
b.set(0, 42);
console.log(a);
JS小提琴:http://jsfiddle.net/YewC4/4/
我不知道IE8,因为它的Object.defineProperty是janky,但这似乎做你问的,即使你问的不是最好的主意,因为在其他评论中指出的原因:
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function ViewOf(orig, from, to){
var sub=orig.slice(from, to);
for(var i=0, mx=sub.length;i<mx;i++){(function(i){ var it=sub[i];
Object.defineProperty(sub, i, { get: function(){ return it;}, set: function(v){ return it=orig[i+from]=v; } });
}(i));}
return sub;
}
var b = ViewOf(a, 3, 6); // Make a view of a, from index 3 to 6
console.log(b); // [3, 4, 5, 6]
b[0] = 42;
console.log(a); //shows: [0, 1, 2, 42, 4, 5, 6, 7, 8, 9]
请看https://github.com/inexorabletash/polyfill。
这个多边形库有typearray .js,它包含了ArrayBuffer和ArrayBufferView的多边形。
我不知道这个lib。只是一个快速谷歌…
相关文章:
- 如何在不使用ajax的情况下将pair值添加到数组并发送到django中的视图
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 使用Ruby数组使用JS在视图中进行迭代和显示
- 从Nodejs中的函数返回数组,并将其发送到ejs视图
- 更新Aurelia中二维数组的视图
- Javascript数组或Google图表视图.setColumns
- MVC:使用Web窗体视图引擎在javascript中迭代Viewbag数组
- 如何将Javascript数组传递给视图?(MVC4)
- Angular数组更改时更新HTML视图
- 将数组传递到Laravel视图,并将该数组用作VueJS道具
- 从 sproutcore 中的父视图获取数组
- 使用双向绑定将对象从角度视图动态添加/创建到控制器的数组
- 为什么Angular视图中的数组表达式不起作用
- 敲除可观察数组并没有更新从数组中移除元素的视图
- Knockout.js-更新父视图模型中的数组,在第二个视图模型中使用值
- 如何从JSON数组中获取数据并将其放入列表视图中
- Django:返回[Object object]而不是django视图数组
- 如何向窗口和视图数组添加视图