繁体   English   中英

Javascript数组引用数组位置(不是元素)

[英]Javascript array referencing an array position (not an element)

更新:

许多人问为什么不使用[arr[0], arr[1]] 问题是我必须将此数组传递给一个方法,我没有访问Angular Material Table 而且我不想一遍又一遍地调用这个方法。

我已经处理了arr数组,我不想处理pointer数组以反映新数据,我已经知道它在哪里。

Nina Scholz的答案似乎解决了这个问题。


有没有办法在Javascript中使用像C这样的“指针”?

我想做的是:

我有一个带对象的数组

const arr = [
    {prop: 3},
    {prop: 4},
];

我希望有一个数组指向这个数组的位置

const pointer = [arr[0], arr[1]]; // I want pointer to point to be an array containing the first and second elements of arr

这将引用{prop: 3}{prop: 4}对象,这不是我想要的,因为,如果我这样做:

arr.splice(0, 0, {prop: 1}); // arr => [{prop:1},{prop:3},{prop:4}]
console.log(pointer); // [{prop: 3},{prop: 4}]

如您所见, pointer包含对象{prop:3}{prop:4}的引用。

如何实现pointer来保持对数组位置0的引用,而不是存储在其中的对象? 那么,在这个例子中, pointer => [{prop:1},{prop:3}]

我不能一直调用pointer = [arr[0], arr[1]] ,因为arr将不断地和异步地改变。

是否存在处理数组的“反应”方式?

如果指针始终指向同一个数组,则只需存储索引即可。

const pointer = [0, 1];

然后你会用:

console.log(pointer.map(ptr => arr[ptr]));

如果指针可以指向不同的数组,则可以使pointer的元素成为包含对数组的引用及其索引的对象。

const pointer = [{a: arr, i: 0}, {a: arr1, i: 1}];
console.log(pointer.map(({a, i}) => a[i]));

有趣的是:几十年前,我在Symbolics Lisp Machines上使用了C实现。 这基本上就是它如何代表C指针。

您可以使用getter函数并返回实际对象的元素。

 const arr = [{ prop: 3 }, { prop: 4 }]; const pointer = []; Object.defineProperty(pointer, 0, { get() { return arr[0]; } }); Object.defineProperty(pointer, 1, { get() { return arr[1]; } }); arr.splice(0, 0, { prop: 1 }); console.log(pointer); 

您可以使用具有get陷阱代理 (IE不支持):

 const arr = [{ prop: 3 }, { prop: 4 }]; const pointer = new Proxy([], { get(target, prop, receiver) { // if the prop is a string that can be converted to a number // return the corresponding value from the arr if(typeof prop === 'string' && !isNaN(Number(prop))) return arr[target[prop]]; return Reflect.get(target, prop, receiver); } }); pointer.push(0, 1); console.log(pointer); arr.splice(0, 0, { prop: 1 }); console.log(pointer); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM