在nodeJs中成对可除的和?

时间:2018-08-28 12:23:19

标签: javascript arrays node.js foreach

我正在尝试用这段代码解决成对的hackerrank可分和问题,但是结果却是0?

dput(matadata.list)
structure(list(metaDataProperty = structure(list(EarthObservationMetaData = structure(list(
    identifier = "20170127_213132_0e0e_3B_AnalyticMS", acquisitionType = "NOMINAL", 
    productType = "L3B", status = "ARCHIVED", downlinkedTo = structure(list(
        DownlinkInformation = structure(list(acquisitionStation = structure(list(
            text = "Planet Ground Station Network", .attrs = structure("urn:eop:PS:stationLocation", .Names = "codeSpace")), .Names = c("text", 
        ".attrs")), acquisitionDate = "2017-01-27T21:31:32+00:00"), .Names = c("acquisitionStation", 
        "acquisitionDate"))), .Names = "DownlinkInformation"), 
    archivedIn = structure(list(ArchivingInformation = structure(list(
        archivingCenter = structure(list(text = "Planet Archive Center", 
            .attrs = structure("urn:eop:PS:stationLocation", .Names = "codeSpace")), .Names = c("text", 
        ".attrs")), archivingDate = "2017-01-27T21:31:32+00:00", 
        archivingIdentifier = structure(list(text = "385180", 
            .attrs = structure("urn:eop:PS:dmsCatalogueId", .Names = "codeSpace")), .Names = c("text", 
        ".attrs"))), .Names = c("archivingCenter", "archivingDate", 
    "archivingIdentifier"))), .Names = "ArchivingInformation"), 
    processing = structure(list(ProcessingInformation = structure(list(
        processorName = "CMO Processor", processorVersion = "4.1.4", 
        nativeProductFormat = "GeoTIFF"), .Names = c("processorName", 
    "processorVersion", "nativeProductFormat"))), .Names = "ProcessingInformation"), 
    license = structure(list(licenseType = "20160101 - Inc - Single User", 
        resourceLink = structure(c("PL EULA", "https://assets.planet.com/docs/20160101_Inc_SingleUser.txt"
        ), class = structure("XMLAttributes", package = "XML"), namespaces = structure(c("xlink", 
        "xlink"), .Names = c("http://www.w3.org/1999/xlink", 
        "http://www.w3.org/1999/xlink")), .Names = c("title", 
        "href"))), .Names = c("licenseType", "resourceLink")), 
    versionIsd = "1.0", pixelFormat = "16U"), .Names = c("identifier", 
"acquisitionType", "productType", "status", "downlinkedTo", "archivedIn", 
"processing", "license", "versionIsd", "pixelFormat"))), .Names = "EarthObservationMetaData"), 
    validTime = structure(list(TimePeriod = structure(list(beginPosition = "2017-01-27T21:31:32+00:00", 
        endPosition = "2017-01-27T21:31:32+00:00"), .Names = c("beginPosition", 
    "endPosition"))), .Names = "TimePeriod"), using = structure(list(
        EarthObservationEquipment = structure(list(platform = structure(list(
            Platform = structure(list(shortName = "PlanetScope", 
                serialIdentifier = "0e0e", orbitType = "LEO-SSO"), .Names = c("shortName", 
            "serialIdentifier", "orbitType"))), .Names = "Platform"), 
            instrument = structure(list(Instrument = structure(list(
                shortName = "PS2"), .Names = "shortName")), .Names = "Instrument"), 
            sensor = structure(list(Sensor = structure(list(sensorType = "OPTICAL", 
                resolution = structure(list(text = "3.0000", 
                  .attrs = structure("m", .Names = "uom")), .Names = c("text", 
                ".attrs")), scanType = "FRAME"), .Names = c("sensorType", 
            "resolution", "scanType"))), .Names = "Sensor"), 
            acquisitionParameters = structure(list(Acquisition = structure(list(
                orbitDirection = "DESCENDING", incidenceAngle = structure(list(
                  text = "8.072969e-02", .attrs = structure("deg", .Names = "uom")), .Names = c("text", 
                ".attrs")), illuminationAzimuthAngle = structure(list(
                  text = "7.610387e+01", .attrs = structure("deg", .Names = "uom")), .Names = c("text", 
                ".attrs")), illuminationElevationAngle = structure(list(
                  text = "4.649194e+01", .attrs = structure("deg", .Names = "uom")), .Names = c("text", 
                ".attrs")), azimuthAngle = structure(list(text = "1.242074e+01", 
                  .attrs = structure("deg", .Names = "uom")), .Names = c("text", 
                ".attrs")), spaceCraftViewAngle = structure(list(
                  text = "5.692807e-02", .attrs = structure("deg", .Names = "uom")), .Names = c("text", 
                ".attrs")), acquisitionDateTime = "2017-01-27T21:31:32+00:00"), .Names = c("orbitDirection", 
            "incidenceAngle", "illuminationAzimuthAngle", "illuminationElevationAngle", 
            "azimuthAngle", "spaceCraftViewAngle", "acquisitionDateTime"
            ))), .Names = "Acquisition")), .Names = c("platform", 
        "instrument", "sensor", "acquisitionParameters"))), .Names = "EarthObservationEquipment"), 
    target = structure(list(Footprint = structure(list(multiExtentOf = structure(list(
        MultiSurface = structure(list(surfaceMembers = structure(list(
            Polygon = structure(list(outerBoundaryIs = structure(list(
                LinearRing = structure(list(coordinates = "175.446585079397,-37.7068873856657 175.446633607572,-37.7045627724835 175.46731776545,-37.6311749428137 175.468010520596,-37.6311839417076 175.75989021492,-37.6819836599337 175.759889856814,-37.6820051679817 175.739424097003,-37.757826933992 175.739359440859,-37.7578262423109 175.446585079397,-37.7068873856657"), .Names = "coordinates")), .Names = "LinearRing"), 
                .attrs = structure("EPSG:4326", .Names = "srsName")), .Names = c("outerBoundaryIs", 
            ".attrs"))), .Names = "Polygon"), .attrs = structure("EPSG:4326", .Names = "srsName")), .Names = c("surfaceMembers", 
        ".attrs"))), .Names = "MultiSurface"), centerOf = structure(list(
        Point = structure(list(pos = "175.603162359 -37.6944367036", 
            .attrs = structure("EPSG:4326", .Names = "srsName")), .Names = c("pos", 
        ".attrs"))), .Names = "Point"), geographicLocation = structure(list(
        topLeft = structure(list(latitude = "-37.6311749428", 
            longitude = "175.446585079"), .Names = c("latitude", 
        "longitude")), topRight = structure(list(latitude = "-37.6311749428", 
            longitude = "175.759890215"), .Names = c("latitude", 
        "longitude")), bottomRight = structure(list(latitude = "-37.757826934", 
            longitude = "175.759890215"), .Names = c("latitude", 
        "longitude")), bottomLeft = structure(list(latitude = "-37.757826934", 
            longitude = "175.446585079"), .Names = c("latitude", 
        "longitude"))), .Names = c("topLeft", "topRight", "bottomRight", 
    "bottomLeft"))), .Names = c("multiExtentOf", "centerOf", 
    "geographicLocation"))), .Names = "Footprint"), resultOf = structure(list(
        EarthObservationResult = structure(list(product = structure(list(
            ProductInformation = structure(list(fileName = "20170127_213132_0e0e_3B_AnalyticMS.tif", 
                productFormat = "GeoTIFF", spatialReferenceSystem = structure(list(
                  epsgCode = "32760", geodeticDatum = "WGS_1984", 
                  projection = "WGS 84 / UTM zone 60S", projectionZone = "160"), .Names = c("epsgCode", 
                "geodeticDatum", "projection", "projectionZone"
                )), resamplingKernel = "CC", numRows = "4565", 
                numColumns = "9194", numBands = "4", rowGsd = "3.0", 
                columnGsd = "3.0", radiometricCorrectionApplied = "true", 
                geoCorrectionLevel = "Precision Geocorrection", 
                elevationCorrectionApplied = "FineDEM", atmosphericCorrectionApplied = "false"), .Names = c("fileName", 
            "productFormat", "spatialReferenceSystem", "resamplingKernel", 
            "numRows", "numColumns", "numBands", "rowGsd", "columnGsd", 
            "radiometricCorrectionApplied", "geoCorrectionLevel", 
            "elevationCorrectionApplied", "atmosphericCorrectionApplied"
            ))), .Names = "ProductInformation"), mask = structure(list(
            MaskInformation = structure(list(type = "UNUSABLE DATA", 
                format = "RASTER", referenceSystemIdentifier = structure(list(
                  text = "32760", .attrs = structure("EPSG", .Names = "codeSpace")), .Names = c("text", 
                ".attrs")), fileName = "20170127_213132_0e0e_3B_AnalyticMS_DN_udm.tif"), .Names = c("type", 
            "format", "referenceSystemIdentifier", "fileName"
            ))), .Names = "MaskInformation"), cloudCoverPercentage = structure(list(
            text = "0.01", .attrs = structure("percentage", .Names = "uom")), .Names = c("text", 
        ".attrs")), cloudCoverPercentageQuotationMode = "AUTOMATIC", 
            unusableDataPercentage = structure(list(text = "0.0", 
                .attrs = structure("percentage", .Names = "uom")), .Names = c("text", 
            ".attrs")), bandSpecificMetadata = structure(list(
                bandNumber = "1", comment = NULL, radiometricScaleFactor = "0.01", 
                comment = NULL, reflectanceCoefficient = "2.21386105481e-05"), .Names = c("bandNumber", 
            "comment", "radiometricScaleFactor", "comment", "reflectanceCoefficient"
            )), bandSpecificMetadata = structure(list(bandNumber = "2", 
                comment = NULL, radiometricScaleFactor = "0.01", 
                comment = NULL, reflectanceCoefficient = "2.31474175457e-05"), .Names = c("bandNumber", 
            "comment", "radiometricScaleFactor", "comment", "reflectanceCoefficient"
            )), bandSpecificMetadata = structure(list(bandNumber = "3", 
                comment = NULL, radiometricScaleFactor = "0.01", 
                comment = NULL, reflectanceCoefficient = "2.60208594123e-05"), .Names = c("bandNumber", 
            "comment", "radiometricScaleFactor", "comment", "reflectanceCoefficient"
            )), bandSpecificMetadata = structure(list(bandNumber = "4", 
                comment = NULL, radiometricScaleFactor = "0.01", 
                comment = NULL, reflectanceCoefficient = "3.83481925626e-05"), .Names = c("bandNumber", 
            "comment", "radiometricScaleFactor", "comment", "reflectanceCoefficient"
            ))), .Names = c("product", "mask", "cloudCoverPercentage", 
        "cloudCoverPercentageQuotationMode", "unusableDataPercentage", 
        "bandSpecificMetadata", "bandSpecificMetadata", "bandSpecificMetadata", 
        "bandSpecificMetadata"))), .Names = "EarthObservationResult"), 
    .attrs = structure(c("http://schemas.planet.com/ps/v1/planet_product_metadata_geocorrected_level http://schemas.planet.com/ps/v1/planet_product_metadata_geocorrected_level.xsd", 
    "1.2.1", "1.0"), class = structure("XMLAttributes", package = "XML"), namespaces = structure(c("xsi", 
    "", ""), .Names = c("http://www.w3.org/2001/XMLSchema-instance", 
    "", "")), .Names = c("schemaLocation", "version", "planet_standard_product_version"
    ))), .Names = c("metaDataProperty", "validTime", "using", 
"target", "resultOf", ".attrs"))

每个div(6,3, [1, 3, 2, 6, 1, 2]); function div(n, k, ar) { var sum = 0; ar.forEach( (el, index) => { ar.forEach( (elem, indexS) => { console.log((index < indexS) && (el + elem % k === 0)); if((index < indexS) && (el + elem % k === 0)) { sum++; } }) }) console.log(sum); } 都在执行其工作(已通过forEach进行了检查),但结果却始终为0?

任何人都可以提供帮助,非常感谢。

3 个答案:

答案 0 :(得分:1)

在(el + elem)上检查操作顺序,

function div(n,k,ar){
  var sum = 0;
  ar.forEach((ai, ii)=> {
        ar.forEach((aj, jj)=> {
            let isDiv = (ii < jj) && ((ai + aj) % k === 0);
            // console.log('isDiv',isDiv);
            if(isDiv){           
              sum ++;
            }
        })
  })
  return sum;
}
let sum = div(6,3, [1, 3, 2, 6, 1, 2]);
console.log(sum);

答案 1 :(得分:1)

%的优先级更高,因此请使用方括号

   Change   el + elem % k to (el + elem) % k

答案 2 :(得分:1)

这里的问题是您的if语句。通过检查console.log,条件始终返回false,因此从不应用sum ++。我添加了一些评论,希望对您有所帮助!

div(6,3, [1, 3, 2, 6, 1, 2]);

function div(n,k,ar){
  var sum = 0;
  ar.forEach((el, index)=> {
        ar.forEach((elem, indexS)=> {
            console.log((index < indexS) && (el + elem % k === 0)); // this line is always false
            if((index < indexS) && (el + elem % k === 0)){    // meaning this condition is never true       
            sum ++; // will never be called
  
            }
        })
  })

console.log(sum); // returns 0, because value is never incremented
}