#javascript
#javascript
Вопрос:
Я пишу код, который должен сравнить 2 массива json и создать новый массив. data
это основной массив, который используется для сравнения, nData
это 2-й массив json, в котором мы сравниваем значения. вот критерии.
- Если
nData
идентификатор равен sdata
knowledge__c
, создайте новый ключ (именованныйicon
) и значение какbin
- В противном случае создайте новый ключ (именованный
icon
) и значение asnon bin
.
Вот мой код
var data = [{
"Id": "a8109000000CcktAAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oq3ZAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccl4AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oiqdAAA",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccm1AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000orsBAAQ",
"ResearchState__c": "In verification"
}, {
"Id": "a8109000000CcNFAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oipoAAA",
"ResearchState__c": "Confirmed Partial Solution"
}, {
"Id": "a8109000000CcNZAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000onvHAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000CcNPAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000olFxAAI",
"ResearchState__c": "In verification"
}];
var nData = [{
"Id": "ka109000000ors1AAA"
}, {
"Id": "ka109000000oq3ZAAQ"
}, {
"Id": "ka109000000oiqdAAA"
}, {
"Id": "ka109000000oiqDAAQ"
}, {
"Id": "ka109000000oir9AAA"
}, {
"Id": "ka109000000oiqCAAQ"
}];
var articleList = [];
let myArticle = {};
for (let article of nData) {
myArticle = article;
var newA = data.filter((item) => {
if (item.Knowledge__c == article.Id)
myArticle.icon = 'Non bin';
else
myArticle.icon = 'bin';
});
articleList.push(myArticle);
}
console.log(articleList);
В моем текущем коде он добавляется bin
ко всем объектам. т.е. else
Часть запускается.
Пожалуйста, дайте мне знать, где я ошибаюсь и как это исправить.
Спасибо
Комментарии:
1. должны ли
data
иndata
быть одинаковой длины?2. Это массивы объектов, а не JSON.
.filter()
это неправильный метод для использования, он предназначен, ну, для фильтрации элементов из массива. Вместо этого вам нужен.some()
or.find()
.3. нет @richytong, они могут различаться. они являются результатами некоторого поискового запроса в моей системе
4. @GuyIncognito в чем разница между
find()
иsome()
?5. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… и developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ответ №1:
Я полагаю, вы искали some
метод, а не filter
такой:
var data = [{
"Id": "a8109000000CcktAAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oq3ZAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccl4AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oiqdAAA",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccm1AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000orsBAAQ",
"ResearchState__c": "In verification"
}, {
"Id": "a8109000000CcNFAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oipoAAA",
"ResearchState__c": "Confirmed Partial Solution"
}, {
"Id": "a8109000000CcNZAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000onvHAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000CcNPAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000olFxAAI",
"ResearchState__c": "In verification"
}];
var nData = [{
"Id": "ka109000000ors1AAA"
}, {
"Id": "ka109000000oq3ZAAQ"
}, {
"Id": "ka109000000oiqdAAA"
}, {
"Id": "ka109000000oiqDAAQ"
}, {
"Id": "ka109000000oir9AAA"
}, {
"Id": "ka109000000oiqCAAQ"
}];
var articleList = [];
let myArticle = {};
for (let article of nData) {
myArticle = article;
if(data.some((item) => item.Knowledge__c == article.Id)){
myArticle.icon = 'Non bin';
} else{
myArticle.icon = 'bin';
}
articleList.push(myArticle);
}
console.log(articleList);
С some
помощью метода я проверяю, есть ли Knowledge__c
в data
массиве объекты с объектами Id
from nData
Комментарии:
1. Привет @Ran Marciano. Извините за мое невежество, в чем разница между
some
иfind
?2. @user3872094
find
возвращает значение первого элемента в массиве, который удовлетворяет условию функции, в то времяsome
как возвращает логическое значение, проверяя, удовлетворяет ли какой-либо элемент условию.
Ответ №2:
var data = [
{
Id: 'a8109000000CcktAAC',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000oq3ZAAQ',
ResearchState__c: 'Not verified'
},
{
Id: 'a8109000000Ccl4AAC',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000oiqdAAA',
ResearchState__c: 'Not verified'
},
{
Id: 'a8109000000Ccm1AAC',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000orsBAAQ',
ResearchState__c: 'In verification'
},
{
Id: 'a8109000000CcNFAA0',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000oipoAAA',
ResearchState__c: 'Confirmed Partial Solution'
},
{
Id: 'a8109000000CcNZAA0',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000onvHAAQ',
ResearchState__c: 'Not verified'
},
{
Id: 'a8109000000CcNPAA0',
DiagBinder__c: 'a8009000000boTeAAI',
Knowledge__c: 'ka109000000olFxAAI',
ResearchState__c: 'In verification'
}
];
var nData = [
{
Id: 'ka109000000ors1AAA'
},
{
Id: 'ka109000000oq3ZAAQ'
},
{
Id: 'ka109000000oiqdAAA'
},
{
Id: 'ka109000000oiqDAAQ'
},
{
Id: 'ka109000000oir9AAA'
},
{
Id: 'ka109000000oiqCAAQ'
}
];
const articleList = nData.map((item) => ({
...item,
icon: data.some((dt) => dt.Knowledge__c === item.Id) ? 'bin' : 'non bin'
}));
console.log(articleList);
Ответ №3:
var data = [{
"Id": "a8109000000CcktAAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oq3ZAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccl4AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oiqdAAA",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000Ccm1AAC",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000orsBAAQ",
"ResearchState__c": "In verification"
}, {
"Id": "a8109000000CcNFAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000oipoAAA",
"ResearchState__c": "Confirmed Partial Solution"
}, {
"Id": "a8109000000CcNZAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000onvHAAQ",
"ResearchState__c": "Not verified"
}, {
"Id": "a8109000000CcNPAA0",
"DiagBinder__c": "a8009000000boTeAAI",
"Knowledge__c": "ka109000000olFxAAI",
"ResearchState__c": "In verification"
}];
var nData = [{
"Id": "ka109000000ors1AAA"
}, {
"Id": "ka109000000oq3ZAAQ"
}, {
"Id": "ka109000000oiqdAAA"
}, {
"Id": "ka109000000oiqDAAQ"
}, {
"Id": "ka109000000oir9AAA"
}, {
"Id": "ka109000000oiqCAAQ"
}];
const articleList = nData.map(article => data.find(item => item.Knowledge__c == article.Id) ? { ...article, icon: 'Non bin' } : { ...article, icon: 'bin'});
console.log(articleList);