www.webdeveloper.com
Results 1 to 4 of 4

Thread: Testing action of a new(?) function

  1. #1
    Join Date
    Dec 2005
    Location
    TX
    Posts
    7,942

    Question Testing action of a new(?) function

    I was trying out a JS method called .includes.
    In experimenting with the method, I've come across a condition result that I don't understand.
    In the following script, note the areas marked with "???" in the output.
    Those lines give a result that is opposite what I expected from the description

    Code:
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8" />
    <title> Includes and indexOf tests </title>
    <style type="text/css">
     b { color: red; }
    </style>
    </head>
    <body>
    <pre id="output"></pre>
    
    <script>
    function doc(IDS) { return document.getElementById(IDS); }
    
    var s = '',
        nlst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
        alst = ['0','1','2','3','4','5','6','7','8','9'];
    
    s += '\nNumeric array : using "indexOf"';
    // one in many
    if (nlst.indexOf(7)) { s += '\n 7 is in ['+nlst+']'; }
    
    // none in many
    if (nlst.indexOf(-7)) { s += '\n-7 is NOT in ['+nlst+']'; }
    
    // includes from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
    
    s += '\n\nNumeric array : using "includes"';
    s += '\n'+nlst.includes(-7)+': ['+nlst+'] includes number -7';                             // false
    s += '\n '+nlst.includes(7)+': ['+nlst+'] includes number 7';                              //  true
    s += '\n\n '+nlst.includes(7,1)+': ['+nlst+'] includes number 7,1';                        //  true
    s += '\n<b>??? '+nlst.includes(1,7)+': ['+nlst+'] includes number 1,7 ???</b>\n';                          // false ???
    s += '\n'+nlst.includes(7,-1)+': ['+nlst+'] includes number 7,-1';                         // false
    s += '\n'+nlst.includes(1,-7)+': ['+nlst+'] includes number 1,-7';                         // false
    s += '\n'+nlst.includes(-7,-1)+': ['+nlst+'] includes number -7,-1';                       // false
    
    // many in one
    s += '\n\nString array : using "includes"';
    s += '\n'+alst.includes(7)+': ["'+alst.join('","')+'"] includes number -7';                // false
    s += '\n'+alst.includes(7)+': ["'+alst.join('","')+'"] includes number 7';                 // false
    s += '\n '+alst.includes("7")+': ["'+alst.join('","')+'"] includes string "7"';            //  true
    
    // many in many
    s += '\n\n '+alst.includes("7","1")+': ["'+alst.join('","')+'"] includes string "7","1"';  //  true
    s += '\n<b>??? '+alst.includes("1","7")+': ["'+alst.join('","')+'"] includes string "1","7" ???</b>\n';     // false ???
    s += '\n'+alst.includes("7","-1")+': ["'+alst.join('","')+'"] includes string "7","-1"';   // false
    s += '\n'+alst.includes("-7","1")+': ["'+alst.join('","')+'"] includes string "-7","1"';   // false
    s += '\n'+alst.includes("-7","-1")+': ["'+alst.join('","')+'"] includes string "-7","-1"'; // false
    
    doc('output').innerHTML = s.replace(/\n/g,'<br>');
    </script>
    
    </body>
    </html>
    In both cases I reversed the order of the parameters
    but I did NOT expect a reversal of the expected "true" to "false" displays.
    See reference:
    https://developer.mozilla.org/en-US/...Array/includes

    Can anyone tell me where my thinking is going awry?

  2. #2
    Join Date
    Dec 2005
    Location
    TX
    Posts
    7,942
    Upon more detailed reading, I found the answer.


    fromIndex is greater than or equal to the array length

    If fromIndex is greater than or equal to the length of the array, false is returned. The array will not be searched.
    Function is working correctly as advertised. (But I don't like the underlying logic)
    I was interpreting the second parameter of the .includes function incorrectly.
    Last edited by JMRKER; 02-13-2018 at 12:03 PM.

  3. #3
    Join Date
    Mar 2007
    Location
    localhost
    Posts
    5,855
    All the examples I have found only use one parameter in the includes() method.
    --> JavaScript Frameworks like JQuery, Angular, Node <--
    ... and please remember to wrap code with forum BBCode tags:-

    [CODE]...[/CODE] [HTML]...[/HTML] [PHP]...[/PHP]

    If you can't think outside the box, you will be trapped forever with no escape...

  4. #4
    Join Date
    Dec 2005
    Location
    TX
    Posts
    7,942
    Quote Originally Posted by \\.\ View Post
    All the examples I have found only use one parameter in the includes() method.
    Thanks. I've come to that conclusion as well even though there are some examples that use two parameters. That is what confused me as I was thinking that more than one value at a time could be tested for a true/false response.

    I'm not sure of the difference between .indexOf and .includes
    It appears that both work the same except for the response.

    To me the .indexOf is more useful as it either returns the position (in the string OR array) of the found value or -1 if the value is not found.

    The includes only returns true/false if the test value is found or not found either from the start of the array or a specified index location. I guess this might be used to determine if duplicate values are in an array by first locating the 1st value found position and using that in the includes to see if additional similar values are in the rest of the test array.
    Last edited by JMRKER; 02-13-2018 at 04:35 PM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center

"

"

X vBulletin 4.2.2 Debug Information

  • Page Generation 0.14679 seconds
  • Memory Usage 2,879KB
  • Queries Executed 16 (?)
More Information
Template Usage (34):
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)bbcode_code
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (4)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (72):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates