我有一個城市串列和一個短語串列。我需要檢查短語中是否存在城市,并根據此回傳“大城市”或“不是大城市”
我認為使用 some() 函式會很簡單,但我似乎不清楚它是如何作業的。我試過用一個字串表示一個城市和一組城市..但兩者似乎都不起作用..
我已經檢查了這個問題(檢查一個陣列的元素是否包含在另一個陣列的元素中),也許答案就在那里,但似乎在那里使用了過濾器..我必須這樣做還是我不能只使用一些并得到結果?
我會很感激一些幫助解釋為什么下面的代碼不起作用..我已經失去了一天試圖弄清楚但我似乎無法..在我的腦海中result應該是“大城市”兩次下面的代碼.. 一次用于“紐約”,一次用于“米蘭”
// COMMON FOR BOTH
const phrases = ['I live in San Francisco','I live in milan in italy', 'I live in Los Angeles', 'I live in New York City']
// WITH AN ARRAY
const cities=['paris',"new york",'milan'];
function checkCities(phrase){
cities.forEach(city=> phrase.includes(city));
};
const result1 = phrases.some(checkCities) ? "big city" : "not a big city";
console.log('result1',result1); // Output "not a big city"
// WITH JUST A STRING
const city = 'new york';
const result2 = phrases.some(checkCity) ? "big city" : "not a big city";
console.log('result2',result2); // Output "not a big city
function checkCity(phrase){
phrase.includes(city);
};
uj5u.com熱心網友回復:
...
// WITH JUST A STRING
...
function checkCity(phrase){
if (phrase.toLowerCase().includes(city.toLowerCase())) return phrase
};
使用陣列:您可以使用“JUST STRING”代碼回圈每個城市
uj5u.com熱心網友回復:
一個建議:因為includes是區分大小寫的。因此,'new york'.includes('New York')將回傳false。您可以轉換兩個字串lowerCase()以檢查它是否存在。
作業演示:
const phrases = ['I live in San Francisco','I live in milan in italy', 'I live in Los Angeles', 'I live in New York City'];
const city = 'new york';
function checkCities(city) {
return phrases.some((phrase) => phrase.toLowerCase().indexOf(city.toLowerCase()) > -1);
}
console.log(checkCities(city) ? "big city" : "not a big city");
注意:如果您想一次搜索一個城市,上面的代碼將完美運行。
uj5u.com熱心網友回復:
您的問題在于您對傳遞給的函式.some()應該如何作業的誤解。您傳遞給的函式.some()將被 JS 多次呼叫,對于您呼叫該.some()方法的陣列中的每個元素一次。該函式還應該回傳一個true或false值(或一個真/假值)。當您true從函式回傳時,該.some()方法將停止任何進一步的迭代并回傳true(表明您已滿足條件),如果您回傳false,該.some()方法將繼續檢查陣列中的下一個元素。如果傳遞給的函式.some()沒有回傳true陣列中的任何值,則該.some()方法回傳false檢查陣列中的所有專案后。您可以在MDN.some()上閱讀該方法的詳細資訊。
在您的代碼中,您傳遞給.some(),的函式checkCities沒有任何作用,因此每次 JS 呼叫它時它都會return自動回傳一個值,該值對于該方法與為每個元素回傳相同。undefined.some()false
正如您所概述的,您要“檢查是否在任何(.some())短語中,如果.some()存在任何()城市,則回傳“大城市” “。我們可以試著把這句話變成代碼(見下面的代碼注釋):
const phrases = ['I live in San Francisco','I live in milan in italy', 'I live in Los Angeles', 'I live in New York City'];
const cities = ['paris',"new york",'milan'];
// If "any"--------------v of the phrases...
const result1 = phrases.some(checkCities) ? "big city" : "not a big city";
function checkCities(phrase){
// If "any"---v of the cities "exist"------------v
return cities.some(city => phrase.toLowerCase().includes(city.toLowerCase()));
};
console.log('result1', result1); // Output "not a big city"
這里我們使用了兩種.some()方法,一種在外部phrases遍歷短語,另一種在內部.some()檢查是否有任何城市字串在 current 中phrase。如果內部.some()方法回傳true(表明在短語中找到了一個城市),那么你的外部.some()方法也將回傳true,否則,如果內部.some()方法無法在任何短語中找到一個城市,那么它將為false每個回傳phrase由外部回圈迭代,這將導致您的外部.some()方法回傳false.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443223.html
標籤:javascript 数组 包括
