Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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,我需要从多个对象的每个数组中减去一个固定值。在本例中,可以将一些坐标视为数组。现在,第一个值应减去10,第二个值应减去20 var x = 10; var y = 20; var data = { "imagePoints": [{ "id": "BTLS5YAJHbA5QWqRP", "coordinates": [ 534, 242 ], "content": "something" }, { "id": "y

我需要从多个对象的每个数组中减去一个固定值。在本例中,可以将一些坐标视为数组。现在,第一个值应减去10,第二个值应减去20

var x = 10;
var y = 20;

var data = {
    "imagePoints": [{
        "id": "BTLS5YAJHbA5QWqRP",
        "coordinates": [ 534, 242 ],
        "content": "something"
    }, {
        "id": "yXCFyWaZMbpi8EczY",
        "coordinates": [ 398, 176 ],
        "content": "anything"
    }, {
        "id": "qJz9oMNfc8BmhMmEg",
        "coordinates": [ 272, 230 ]
    }]
}
结果将是第一个点
[524222]
。我如何做到这一点,因为我在获取数据变量中的值时遇到问题:

data.forEach(function(point) {
    point.coordinates[0] - x;
    point.coordinates[1] - y;
}

我已经用map实现了

var x = 10;
var y = 20;

var arr = [x, y];

data.imagePoints.map(function (item) {
  item.coordinates = item.coordinates.map(function (coordinate, index) {
    return (coordinate - arr[index]) < 0 ? 0 : (coordinate - arr[index]);
  });
  return item;
});

console.log(data);
var x=10;
变量y=20;
var-arr=[x,y];
data.imagePoints.map(功能(项){
item.coordinates=item.coordinates.map(函数(坐标、索引){
返回值(坐标-arr[index])<0?0:(坐标-arr[index]);
});
退货项目;
});
控制台日志(数据);

非常简单:您只需1)遵循数据源的实际结构,2)重新分配值:

data.imagePoints.forEach(function(point) { 
  point.coordinates[0] -= x;
  point.coordinates[1] -= y;
});
如果您还想考虑限制,则必须使用简单赋值,而不是复合赋值:

data.imagePoints.forEach(function(point) {
  point.coordinates[0] = Math.max(point.coordinates[0] - x, 0);
  point.coordinates[1] = Math.max(point.coordinates[1] - y, 0);
});

data.imagePoints.forEach(函数(点){point.coordinates[0]-=x;//依此类推}
@raina77现在我非常喜欢这个解决方案。请将此作为一个答案发布。我如何防止负值?-10应该变成0…在这种情况下应该使用什么方法?Map还是forEach?性能?使用
.Map
而不指定其结果几乎总是一种反模式,因此首先
.Map
没有意义f internal
.map
也是可疑的:您更改现有数组的元素,而不是基于它创建另一个数组。