不确定我做错了什么。
function ccheck(){
var tkhContacts = SpreadsheetApp.openById('##').getSheetByName('contacts');
var emf = ContactsApp.getContactGroup('emf').getContacts();
var fullNames = emf.map( function(contact){ return contact.getFullName() } );
var tkhContacts = tkhContacts.getRange('B2:B').getValues();
for(var i=0;i<fullNames.length;i++){
if(fullNames[i].indexOf(tkhContacts) == -1){
Logger.log('missing')}
}
}
尝试将所有Google联系人放入群组&#em;&#39;成阵列。然后将表中存储在B列中的联系人名称放入一个数组中。然后在&#39; fullNames&#39;中取出每个名字。数组并检查它是否与&t; tkhContacts&#39;中的任何名称相匹配。从表格。如果姓名在&#39; fullNames&#39;不符合&t; tkhContacts&#39;中的任何名称将值设置为false。
答案 0 :(得分:0)
我认为您使用的是错误的indexOf方法。看起来您使用的是String.prototype.indexOf()而不是Array.prototype.indexOf()。
这个 应该适用于你的代码,但是没有任何数据就很难测试。
const a = ['Sally', 'Walker', 'Claire', 'Lilly'];
const b = ['Kyle', 'Sally', 'Walker', 'Caroline', 'Claire'];
const d_hash = {};
const d_list = [];
a.forEach(a => {
const i = b.indexOf(a);
if (i === -1) {
// the name is missing
d_hash[a] = {
status: 'missing',
index: null
};
d_list.push(a);
} else {
// the name has been found
d_hash[a] = {
status: 'found',
index: i
}
}
});
console.log(d_hash);
console.log(d_list);
逻辑:
a
和数组b
。我想找到a
但不在b
中显示的名称。<强>替代地强>
您真正想要做的是找到Set a
和Set b
的区别。
我们可以将每个数组转换为一个集合,然后执行差异以获取出现在一个而不是另一个中的元素。
const a = ['Sally', 'Walker', 'Claire', 'Lilly'];
const b = ['Kyle', 'Sally', 'Walker', 'Caroline', 'Claire'];
const set_a = new Set(a);
const set_b = new Set(b);
// code adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
Set.prototype.diff = function (b) {
const d = new Set(a);
b.forEach(el => d.delete(el));
return d;
}
console.log(Array.from(set_a.diff(set_b))); // ["Lilly"]
<强>澄清:强>
对于每个浏览器中的Array.prototype本身提供的方法。 More info here
forEach应该应用于数组,并且该方法需要一个应该处理每个元素的函数回调。
(...) => { ... }
?这代表arrow functions which are available in ES6。这个箭头语法提供了一种替代(在我看来,更清晰,更清晰)的方法来定义函数。
以前表示为:
的东西function (el) {
d.delete(el);
}
可以缩短为
(el) => d.delete(el);