Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列视图是否可行?_Javascript_Arrays - Fatal编程技术网

Javascript 阵列视图是否可行?

Javascript 阵列视图是否可行?,javascript,arrays,Javascript,Arrays,我想知道是否有可能以跨浏览器兼容的方式(比如说IE8)模拟一个over-an的受限边界行为 考虑如下所示的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

我想知道是否有可能以跨浏览器兼容的方式(比如说IE8)模拟一个over-an的受限边界行为

考虑如下所示的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]
看一看

此polyfill库包含用于ArrayBuffer和ArrayBufferView的polyfill


我不知道这个词。只有快速的谷歌搜索..

这在默认情况下是不可能的。您可以使用自定义函数来模拟它

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 Fiddle:

我不知道IE8,因为它是Object.defineProperty,但它似乎满足了你的要求,即使你的要求不是最好的主意,原因在其他评论中指出:

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]
var a=[0,1,2,3,4,5,6,7,8,9];
功能视图(起点、起点、终点){
var sub=原始切片(从、到);

对于(var i=0,mx=sub.length;一般来说,不,这是不可能的。您可以使用带有
Object.defineProperty
的getter和setter来管理某种黑客行为,但这将非常糟糕,因为您需要为每个索引定义一个getter和setter。在ECMAScript 6草案中可能有这样做的方法。