检查javascript对象是否是javascript对象数组的一部分

时间:2015-09-06 18:43:32

标签: javascript jquery arrays object

我正在创建一个非常类似于经典街机Snake游戏的JavaScript游戏。 对于每件食物蛇吃,它的大小从大小5开始+1。 它包含在450X450像素的画布中,大小为10x10像素(图片)。

enter image description here

原始游戏是从其他来源获取和修改的,但我的目标是创建自动驾驶。

这是产生食物的功能

    function create_food() {

    food = {
        x: Math.round(Math.random() * (w - cw) / cw),
        y: Math.round(Math.random() * (h - cw) / cw),
    };
}

基本上它是从0到width_of_canvas的随机数 - snake_cell / snake_cell((450-10)/ 10)。 因此食物具有坐标x和坐标y。蛇细胞的原理非常相似,但它是一个包含所有蛇细胞的阵列。

    function create_snake() {
    snake_array = []; //Empty array to start with
    length = 5;
    for (var i = length - 1; i >= 0; i--) {
        //This will create a horizontal snake starting from the top left
        snake_array.push({
            x: i,
            y: 0
        });
    }
}

唯一区别是蛇形数组中有多个字段,而食物数组中只有一个。

问题: 我不希望食物在我的蛇中产卵,所以我需要检查食物的坐标是否与蛇形阵列中的一个相同。

我在考虑inArray()函数,但在这种情况下我不知道如何使用它。

示例: 食物[0] .x = 31;食物[0] .y = 22

  • snake_array [0] .x = 28; snake_array [0] .y = 22
  • snake_array [1]。x = 29; snake_array [1]。y = 22
  • snake_array [2] .x = 30; snake_array [2] .y = 22
  • snake_array [3] .x = 31; snake_array [3] .y = 22 碰撞
  • snake_array [4] .x = 32; snake_array [4] .y = 22
编辑:谢谢@Siguza

1 个答案:

答案 0 :(得分:0)

如果您可以使用lodash,那么已经有一个函数来查找两个对象是否相同:

_.isEqual(object, other);

在您的函数中,您可以检查JavaScript中的in_array();等效项。

function in_array(needle, haystack, argStrict) {
  //  discuss at: http://phpjs.org/functions/in_array/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: vlado houba
  // improved by: Jonas Sciangula Street (Joni2Back)
  //    input by: Billy
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  //   example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
  //   returns 1: true
  //   example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
  //   returns 2: false
  //   example 3: in_array(1, ['1', '2', '3']);
  //   example 3: in_array(1, ['1', '2', '3'], false);
  //   returns 3: true
  //   returns 3: true
  //   example 4: in_array(1, ['1', '2', '3'], true);
  //   returns 4: false

  var key = '',
    strict = !! argStrict;

  //we prevent the double check (strict && arr[key] === ndl) || (!strict && arr[key] == ndl)
  //in just one for, in order to improve the performance 
  //deciding wich type of comparation will do before walk array
  if (strict) {
    for (key in haystack) {
      if (haystack[key] === needle) {
        return true;
      }
    }
  } else {
    for (key in haystack) {
      if (haystack[key] == needle) {
        return true;
      }
    }
  }

  return false;
}

您可以更改其中显示的功能:

haystack[key] == needle

以下内容:

_.isEqual(haystack[key], needle)
相关问题