Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 - Fatal编程技术网

Javascript使用对象变量从数组中删除对象

Javascript使用对象变量从数组中删除对象,javascript,Javascript,因此,我尝试使用数组,出于演示目的,我使用点作为示例压缩了代码。我想创建一个点并将其推送到数组中,然后在做了一些事情之后,我想从数组中删除该点 var PointArray = []; function CreatePoint(X,Y){ this.x=X; this.y=Y; PointArray.push(this); } function RemovePoint(PointObject){ //???? } var xPoint = CreatePoint

因此,我尝试使用数组,出于演示目的,我使用点作为示例压缩了代码。我想创建一个点并将其推送到数组中,然后在做了一些事情之后,我想从数组中删除该点

var PointArray = [];
function CreatePoint(X,Y){
    this.x=X;
    this.y=Y;
    PointArray.push(this);
}
function RemovePoint(PointObject){
     //????
}
var xPoint = CreatePoint(10,10);
//do stuff
RemovePoint(xPoint);

我在看电视‍
Array.prototype
manual和
PointArray.Splice
似乎是最接近的,但感觉很凌乱,因为它需要索引。任何人都可以从数组中删除对象,从而进入函数
RemovePoint

要查找数组中某个对象的索引,请使用
indexOf

function RemovePoint(PointObject){
  const index = PointArray.indexOf(PointObject);
  PointArray.splice(index, 1); // remove one item at index "index"
}

但是如果你这样做,你可能会考虑使用<代码> SET/COME >,如果你想要一个集合,它可能更合适,但是每个对象的索引实际上并不重要——那么,你可以只调用<代码> PooTcSt.删除(PooToStube);<代码>:

const PointSet=new Set();
函数CreatePoint(X,Y){
这个.x=x;
这个。y=y;
添加(这个);
}
函数RemovePoint(PointObject){
删除(PointObject);
}
log(PointSet.size);
const xPoint=新的CreatePoint(10,10);
log(PointSet.size);
移除点(xPoint);

log(PointSet.size)
要查找数组中某物的索引,请使用
indexOf

function RemovePoint(PointObject){
  const index = PointArray.indexOf(PointObject);
  PointArray.splice(index, 1); // remove one item at index "index"
}

但是如果你这样做,你可能会考虑使用<代码> SET/COME >,如果你想要一个集合,它可能更合适,但是每个对象的索引实际上并不重要——那么,你可以只调用<代码> PooTcSt.删除(PooToStube);<代码>:

const PointSet=new Set();
函数CreatePoint(X,Y){
这个.x=x;
这个。y=y;
添加(这个);
}
函数RemovePoint(PointObject){
删除(PointObject);
}
log(PointSet.size);
const xPoint=新的CreatePoint(10,10);
log(PointSet.size);
移除点(xPoint);

log(PointSet.size)为什么不使用过滤器从PointArray中删除元素

var PointArray = [];
function CreatePoint(X,Y){
    this.x=X;
    this.y=Y;
    PointArray.push(this);
}
function RemovePoint(PointObject){
  PointArray = PointArray.filter(singlePoint=>!(singlePoint.x==PointObject.x && singlePoint.y==PointObject.y));
}
var xPoint = new CreatePoint(10,10);
var yPoint = new CreatePoint(20,20);
//do stuff
console.log(PointArray);
RemovePoint(xPoint);
console.log(PointArray);

为什么不使用过滤器从PointArray中删除元素

var PointArray = [];
function CreatePoint(X,Y){
    this.x=X;
    this.y=Y;
    PointArray.push(this);
}
function RemovePoint(PointObject){
  PointArray = PointArray.filter(singlePoint=>!(singlePoint.x==PointObject.x && singlePoint.y==PointObject.y));
}
var xPoint = new CreatePoint(10,10);
var yPoint = new CreatePoint(20,20);
//do stuff
console.log(PointArray);
RemovePoint(xPoint);
console.log(PointArray);


Slice是指除非你想使用一个库,否则你怎么做。Slice是指除非你想使用一个库,否则你怎么做。啊。我不知道我能做到。让我去看看上面的文件。@MoonEater916对我来说很好用-参见编辑。调用
CreatePoint
设置的大小增加到1,然后调用
RemovePoint
将大小减少到0。执行测试xPoint是未定义的,因为我没有在“var xPoint=new CreatePoint(10,10);”行中添加“new”;“效果很好!”!谢谢@MarkMeyerAh。我不知道我能做到。让我去看看上面的文件。@MoonEater916对我来说很好用-参见编辑。调用
CreatePoint
设置的大小增加到1,然后调用
RemovePoint
将大小减少到0。执行测试xPoint是未定义的,因为我没有在“var xPoint=new CreatePoint(10,10);”行中添加“new”;“效果很好!”!感谢@Markmeyer在您的特定示例中,因为他们不想删除具有特定x/y值的所有点,他们想删除特定条目。但即使使用集合也不允许保留重复项。因此,没有两个点具有相同的x和y值,这取决于等式的定义方式,但集合不一定是我们不知道的正确方法,因为没有定义完整的问题。要从集合为点的集合中删除项,唯一的等式检查将是x和y。插入检查也是如此。对于当前的对象定义,是的,但这通常是表示点的一种不好的方式,因为具有相同坐标的不同点是完全有效的。但这与问题是正交的,即如何删除特定的数组项,它可能是唯一的,也可能不是唯一的,我们只是不知道问题的参数。在您的特定示例中,因为他们不想删除具有特定x/y值的所有点,他们想删除一个特定的条目,但即使使用集合也不允许保留重复项。因此,没有两个点具有相同的x和y值,这取决于等式的定义方式,但集合不一定是我们不知道的正确方法,因为没有定义完整的问题。要从集合为点的集合中删除项,唯一的等式检查将是x和y。插入检查也是如此。对于当前的对象定义,是的,但这通常是表示点的一种不好的方式,因为具有相同坐标的不同点是完全有效的。但这与问题是正交的,即如何删除特定的数组项,它可能是唯一的,也可能不是唯一的,我们只是不知道问题的参数。