Merge pull request #453 from dorayakikun/master

Binding for Array.prototype.map()
This commit is contained in:
Nick Fitzgerald 2018-07-10 16:39:11 -07:00 committed by GitHub
commit 94d939f4da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 0 deletions

View File

@ -216,6 +216,16 @@ extern "C" {
#[wasm_bindgen(method, getter, structural)] #[wasm_bindgen(method, getter, structural)]
pub fn length(this: &Array) -> u32; pub fn length(this: &Array) -> u32;
/// map calls a provided callback function once for each element in an array,
/// in order, and constructs a new array from the results. callback is invoked
/// only for indexes of the array which have assigned values, including undefined.
/// It is not called for missing elements of the array (that is, indexes that have
/// never been set, which have been deleted or which have never been assigned a value).
///
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
#[wasm_bindgen(method)]
pub fn map(this: &Array, predicate: &mut FnMut(JsValue, u32, Array) -> JsValue) -> Array;
/// The pop() method removes the last element from an array and returns that /// The pop() method removes the last element from an array and returns that
/// element. This method changes the length of the array. /// element. This method changes the length of the array.
/// ///

View File

@ -796,3 +796,37 @@ fn find() {
) )
.test() .test()
} }
#[test]
fn map() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js;
use JsValue;
#[wasm_bindgen]
pub fn array_map(array: &js::Array) -> js::Array {
array.map(&mut |el, _, _| JsValue::from_f64(el.as_f64().unwrap().sqrt()))
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
const numbers = [1, 4, 9];
assert.deepStrictEqual(wasm.array_map(numbers), [1, 2, 3]);
}
"#,
)
.test()
}