Как проверить, содержит ли массив элемент в JavaScript - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть массив из списков воспроизведения . Плейлист имеет много сообщений .

Я пытаюсь определить, содержит ли выбранный плейлист уже post Я хочу добавить.

В настоящее время я получаю «Уже добавлено» , если любой список воспроизведения в списках воспроизведения Массив содержит это сообщение .

Я хочу только добавить сообщения в playlists, которые НЕ уже содержат сообщение .

По сути, я все еще хочу добавить запись в список воспроизведения, даже если этот список содержит другой список воспроизведения.

const confirmAdd = (selectedPlaylist, selectedPost) => {
    for(var i = 0; i < playlists.length; i++) {
        if (playlists[i].posts.length > 0) {
            if (playlists[i].posts.some(post => post.id != selectedPost.id)) {
                console.log("Success")
            } else {
                console.log("Already added")
            }
            break
        } else {
            console.log("Success")
            break
        }
    }
}

Ответы [ 4 ]

0 голосов
/ 26 апреля 2020

Итак, я полагаю, у вас есть информация о выбранном списке воспроизведения, и если это объект, давайте отнесем его к объекту с именем selectedPlaylist. В этом случае ваш код должен выглядеть примерно так:

function confirmAddFn(selectedPlaylist = {}, reqpost = {}) {

        //Here Selected Play list is the reference object of the selection

        //searching for the post
        let filteredPost = selectedPlaylist.posts.items.filter(post => post.id == reqpost.id);

        //if there is a post log already exsist
        if (filteredPost.length > 0) {
            console.log("Already Exsist");
        }
        else {
            //else add to the ref ob
            selectedPlaylist.posts.items.push(reqpost);
        }

    }

Теперь, если у вас нет выделенного объекта, а просто индекс выбранного сообщения. приведенный ниже код должен помочь

function confirmAddFn(playList = [], reqpost = {}, selectedPlayListIndex = -1) {

    //Here Selected Play list is the reference object of the selection
    let selectedPlaylist = playList[selectedPlayListIndex];

    //searching for the post
    let filteredPost = selectedPlaylist.posts.items.filter(post => post.id == reqpost.id);

    //if there is a post log already exsist
    if (filteredPost.length > 0) {
        console.log("Already Exsist");
    }
    else {
        //else add to the ref ob
        selectedPlaylist.posts.items.push(reqpost);
    }

}
0 голосов
/ 26 апреля 2020

вы можете использовать "indexOf"

let myArray = ["hello", "this", "is", "array"];

if(myArray.indexOf("hello") > -1){
     console.log("Hello is available")
}else{
     console.log("not available")

}

Метод indexOf () возвращает позицию первого вхождения указанного значения в строке.

Этот метод возвращает -1, если значение для поиска никогда не встречается.

-w3schools

0 голосов
/ 26 апреля 2020

Javascript имеет множество замечательных функций, которые помогают манипулировать массивами.

Для этой задачи вы можете использовать .includes(), чтобы проверить массив на наличие дублирующихся данных.

if(playlist.includes(post)){
    ...do the thing
} else {
    ...do the other thing
}
0 голосов
/ 26 апреля 2020

Параметр playlist для функции confirmAdd() должен быть playlists, поскольку именно это вы используете в функции

...