1

I have an array with size of 3. I need to call a function dynamically when the array value is changed. Any idea?

var arr = ["","",""];

arr[0] = 'first value is chagned';
arr[1] = 'second value is chagned';


function arrFunction(){
    console.log('Array value changed')
}

Expected output

Array value changed

Array value changed

.

I know we can achive this by calling function directly like below. For your reference, I gave these inputs. I can not directly call function like below

var arr = ["","",""];

arr[0] = 'first value is chagned';
arrFunction()
arr[1] = 'second value is chagned';
arrFunction()

function arrFunction(){
    console.log('Array value changed')
}
Vigneswaran A
  • 562
  • 7
  • 18

1 Answers1

3

if your target support Proxies this is easy to do:

let observe = (obj, fn) => new Proxy(obj, {
    set(obj, key, val) {
        obj[key] = val;
        fn(obj)
    }
});

arr = observe(['', '', ''], arr => {
    console.log('arr changed! ', arr)
});

arr[0] = 'first value is chagned';
arr[1] = 'second value is chagned';
georg
  • 211,518
  • 52
  • 313
  • 390