问题是这个:我需要生成一个函数:
“如果数组第一个元素中的字符串包含该数组第二个元素中字符串的所有字母,则返回true。参数[” hello“,” hey“]应该返回false,例如,因为字符串“ hello”不包含“ y”。”
我想到了这个,但是它不起作用,我也不明白为什么:
function mutation(arr) {
var test = arr[1].toLowerCase();
var target = arr[0].toLowerCase();
for (var i=0;i<test.length;i++) {
if (target.indexOf(test[i]) >= 0){
return true;
}
}
return false;
}
答案 0 :(得分:0)
因为您是在第一次成功检查后返回的。您可以将其更改为在第一次失败检查时返回svg{
background-color:lightblue;
}
:
<svg width="100" height="100">
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="0" refY="center" markerUnits="strokeWidth">
<path d="M0,0 L0,12 L12,6 z" fill="red" />
</marker>
</defs>
<line x1="0" y1="50" x2="50" y2="50" stroke="red" stroke-width="2" marker-end="url(#arrow)" />
</svg>
答案 1 :(得分:0)
这可能对您有帮助
ProperSomeClass
答案 2 :(得分:0)
尝试一下:
function mutation(arr) {
var test = arr[1].toLowerCase();
var target = arr[0].toLowerCase();
for (var i=0;i<test.length;i++) {
if (!target.includes(test[i])){
return false;
}
}
return true;
}
答案 3 :(得分:0)
有一种现代的,易读的,实用的方法来解决您的问题,根本没有循环。更具可读性的版本:
let testStrings = ['hello', 'hey']
function compare (arrayOfStrings) {
let searchIn = [...arrayOfStrings[0]]
let theseLetters = [...arrayOfStrings[1]]
const condition = letter => searchIn.includes(letter)
return theseLetters.every(condition)
}
console.log(compare(testStrings))
或赶时髦的人版本:
let testStrings = ['hello', 'hey']
function compare (a) {
let [i, t] = a.map(v => [...v])
return t.every(l => i.includes(l))
}
console.log(compare(testStrings))
答案 4 :(得分:0)
有趣的算法,试图以功能ES6的方式解决...
const array1 = ['hello', 'ole'];
const array2 = ['hello', 'helloeloe']
const array3 = ['hello', 'hey']
const mutation = (array) => {
const [target, test] = array.map(
item => item.toLowerCase().split('')
)
return !test.filter(item => !target.includes(item)).length;
}
console.log(mutation(array1));
console.log(mutation(array2));
console.log(mutation(array3));