首先,请原谅我的英语。我会尽力解释我能做到的最好的事情。
我想开发一款多米诺骨牌游戏机。
我将所有多米诺骨牌存储到名为dominoes
的数组中。
function createNewDominoes(dominoes) {
newDomino = {
a: Math.floor((Math.random() * 7) - 0),
b: Math.floor((Math.random() * 7) - 0),
tipo: null
}
newDominoFlipped = {
a: nuevaFicha.b,
b: nuevaFicha.a,
tipo: null
}
console.log(nuevaFicha, nuevaFichaVolteada)
if ((includes(dominoes, newDomino)) || (includes(dominoes, newDominoFlipped))) {
console.log("Element already exist")
} else {
array.push(nuevaFicha)
}
}
我使用的是Node.js,我在app.js文件中包含了array-includes模块,它允许我检查我的数组元素。
问题是,当我得到数组时,函数返回28个元素,这没关系,但有些是重复的。例如:
[ { a: 3, b: 0, tipo: null },
{ a: 5, b: 2, tipo: null },
{ a: 1, b: 4, tipo: null },
{ a: 1, b: 6, tipo: null },
{ a: 2, b: 4, tipo: null },
{ a: 4, b: 2, tipo: null },
{ a: 4, b: 2, tipo: null },
{ a: 3, b: 3, tipo: null },
{ a: 5, b: 5, tipo: null },
{ a: 3, b: 4, tipo: null },
{ a: 0, b: 6, tipo: null },
{ a: 6, b: 0, tipo: null },
{ a: 4, b: 4, tipo: null },
{ a: 6, b: 3, tipo: null },
{ a: 5, b: 2, tipo: null },
{ a: 3, b: 4, tipo: null },
{ a: 3, b: 5, tipo: null },
{ a: 2, b: 3, tipo: null },
{ a: 3, b: 4, tipo: null },
{ a: 3, b: 3, tipo: null },
{ a: 5, b: 3, tipo: null },
{ a: 0, b: 1, tipo: null },
{ a: 2, b: 2, tipo: null },
{ a: 0, b: 3, tipo: null },
{ a: 2, b: 3, tipo: null },
{ a: 4, b: 4, tipo: null },
{ a: 0, b: 4, tipo: null },
{ a: 5, b: 1, tipo: null } ]
我需要获得所有28张多米诺骨牌,但它们不能重复或翻转重复。
希望你能帮助我
答案 0 :(得分:0)
编写自己的函数,看看多米诺骨牌是否相等。然后使用Array.some
方法查看是否有任何多米诺骨牌符合该条件:
function parseUserDate($input, $allow_zero = false) {
if (!is_string($input)) {
return $input === null ? null : false;
}
$input = preg_split('/\\D+/', $input, null, PREG_SPLIT_NO_EMPTY);
if (!$input) {
return null;# no date
}
if (count($input) == 3) {
list($od, , $oy) = $input;
if (strlen($od) > 2 && strlen($oy) < 3) {# assume ISO
$oy = $od;
$input = array_reverse($input);
}
$intify = function($dig) {
return (int) ltrim($dig, '0');# prevent octals
};
list($d, $m, $y) = array_map($intify, $input);
if (strlen($oy) < 3) {
$current_year = date('Y');
$current_year_2 = $intify(substr($current_year, -2));
$diff = $y - $current_year_2;
if ($diff > 50) {
$diff -= 100;
}
elseif ($diff < -50) {
$diff += 100;
}
$y = $diff + $current_year;
}
if (
($allow_zero && $d == 0 && $m == 0 && $y == 0)
|| checkdate($m, $d, $y)# murrican function
) {
return sprintf('%04d-%02d-%02d', $y, $m, $d);
}
}
return false;# invalid date
}
然后使用它来代替const arr = [{ a: 3, b: 0, tipo: null }]
const same = {a: 3, b: 0, tipo: null};
const reverse = {a: 0, b: 3, tipo: null};
const diff = {a: 4, b: 0, tipo: null};
function dominoEqual(d1, d2) {
if (d1.tipo !== d2.tipo) return false;
return (d1.a === d2.a && d1.b === d2.b) || (d1.a === d2.b && d1.b === d2.a);
}
console.log(arr.some(d => dominoEqual(d, same))) // repeated
console.log(arr.some(d => dominoEqual(d, reverse))) // repeated but reversed
console.log(arr.some(d => dominoEqual(d, diff))) // not repeated
来检查重复项:
includes
答案 1 :(得分:0)
您必须创建自定义功能以检查重复项。每次创建新对象时,都不会满足function containsItemOrFlippedItem(list, item) {
return list.some(function(current) {
return (current.a === item.a && current.b === item.b)
|| (current.a === item.b && current.b === item.a);
});
}
function createNewDominoes(dominoes) {
var newDomino = {
a: Math.floor((Math.random() * 7) - 0),
b: Math.floor((Math.random() * 7) - 0),
tipo: null
};
if (containsItemOrFlippedItem(dominoes, newDomino)) {
console.log("Element already exist");
} else {
dominoes.push(newDomino);
}
}
函数。你可以写一个这样的函数:
some()
这里我使用了Array的some()
函数。在MDN查看<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="30 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
<target>System.err</target>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<root level="${LOGBACK_ROOT_LEVEL:-INFO}">
<appender-ref ref="STDOUT" />
<appender-ref ref="STDERR" />
</root>
</configuration>
的文档。我希望这可以帮助你!!